(全棧須知)5.應用場景整理

前言

redis搬運整理參考:
Redis 列表
Redis使用場景》、《Redis的使用場景php

一、Redis使用場景

消息隊列的使用 RabbitMQ 更專業。
哈希hash至關因而簡化版的有序集合(sorted set)
redis支持集羣水平擴展,支持持久化,在高發、邏輯簡單、非核心的功能上能夠替代MySQL。html

a. 緩存功能:做爲mysql緩存

對於高併發的數據查詢服務,能夠將經常使用查詢結果放到redis:[ key => value ]、設爲優先使用。注意設置合理的鍵名。mysql

b. session共享:php原生支持

php自動管理。web

c. 限速器:驗證碼/短信

每分鐘/30s發送最多一條驗證短信,限制經過速率。redis

d. 計數器:文章瀏覽

對於與評論等相對不重要的熱數據,能夠所有放到redis中,好比像IT之家主要看評論的這種。sql

  • 對象屬性自增:每條微博都有點贊數,評論數,轉發數和瀏覽數四條屬性,這時用hash進行計數會更好,該計數器的key設爲爲weibo:weibo_id,hash的 field 爲like_number、comment_number、forward_number和view_number,在對應操做後經過 HINCRBY 使hash 中的 field 自增。
  • 集合屬性自增:若是應用有一個發帖排行榜的功能,便選擇sorted set吧,將集合的 key 設爲POST_RANK。當用戶發帖後,使用 ZINCRBY 將該用戶 id 的 score 增加 1。sorted set會從新進行排序,用戶所在排行榜的位置也就會獲得實時的更新。
  • 可重複的時間軸:使用:列表(List)。

e. 排行榜:熱點排序

使用:有序集合(sorted set)。ZREVRANGEBYSCORE 返回有序集中指定分數區間內的全部的成員。緩存

f. 好友關係:交集關係計算

使用:集合(Set)。對於一個用戶A,將它的關注和粉絲的用戶id都存放到兩個set中:session

  • A:follow:存放A全部關注的用戶id
  • A:follower:存放A全部粉絲的用戶id

g. 倒排索引:常量搜索

假設一個城市北京,經過拼音詞庫將北京轉爲beijing,再經過前綴分詞將這兩個詞分爲若干個前綴索引,有:北、北京、b、be…beijin和beijing。將這些索引分別做爲set的 key(例如:index:北)並存儲北京的 id,倒排索引便創建好了。接下來只須要在搜索時經過關鍵詞取出對應的set並獲得其中的 id 便可。併發

h. 商品秒殺:列表lpop

初始化,添加秒殺商品rpush ==> 分佈式消費,消費鎖lpop
...異步

二、RabbitMQ異步場景

RabbitMQ能夠搭建集羣,用於任務的異步處理。相比Redis,RabbitMQ實現了AMQP協議,隊列可靠性更高,多了各端中階段的ack驗證,性能差些。
RabbitMQ與Redis隊列對比

a. 消息隊列:流量削峯,異步處理

把執行任務保存爲執行單元、延時處理,發佈、訂閱處理任務。秒殺時能夠串行執行,應用解耦時異步延時處理,普通隊列任務並行執行。

b. 發佈訂閱/即時通信

適合運行在命令行的web後臺環境使用。

三、API 風格

API設計風格(RRC、REST、GraphQL、服務端驅動)

a. RESTful(表徵狀態轉移) API

面向資源

b. GraphQL(描述性查詢語言) API

面向結果數據

d. RPC(遠程過程調用) API

面向過程

相關文章
相關標籤/搜索