應用場景
- 緩存系統(tǒng):用于緩解數(shù)據(jù)庫的高并發(fā)壓力
- 計數(shù)器:使用redis原子操作,用于社交網(wǎng)絡的轉發(fā)數(shù),評論數(shù),粉絲數(shù),關注數(shù)等
- 排行榜:使用zset數(shù)據(jù)結構,進行排行榜計算
- 實時系統(tǒng):使用Redis位圖的功能實現(xiàn)布隆過濾器,進而實現(xiàn)垃圾郵件處理系統(tǒng)
- 消息隊列:使用list數(shù)據(jù)結構,消息發(fā)布者push數(shù)據(jù),多個消息訂閱者通過阻塞線程pop數(shù)據(jù),以此提供簡單的消息隊列能力
之所以說簡單,是因為Redis官方不提供可靠消費/發(fā)布的機制;需要自行實現(xiàn)故障轉移、隊列持久化、隊列監(jiān)控和流量控制等mq具備的功能;
高級功能
慢查詢
慢查詢只記錄Redis在處理存儲的時間計數(shù)(圖中的3步驟),并不包含網(wǎng)絡通信時間和排隊時間,所以客戶端超時分析時要綜合每個因素。
注意:
- 慢查詢保存數(shù)量參數(shù)不要設置過小,同時最好能定期持久化慢查詢記錄,方便歷史問題排查。
pipline
pipline用于異步處理大量Redis請求。
注意:
- 大量任務需要劃分出多個pipline進行操作(否則,網(wǎng)絡和等待時間都承受壓力)。
- pipline每次只能作用在一個Redis節(jié)點上。
- M操作(mget,mset類似的指令)相比pipline,前者是原子操作,后者并不是。Redis會把一個攜帶很多命令的pipeline拆分成幾個子命令。
發(fā)布訂閱
Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
注意:
- Redis無法做消息堆積(新訂閱者無法獲取歷史訂閱消息)
bitmap
字符串big對應的二進制(ASCII碼)如圖所示, bitmap可以直接操控位。使用每個數(shù)位代表一個用戶或者狀態(tài),相比int數(shù)據(jù)結構保存,節(jié)省了32倍的內(nèi)存空間。
注意:
- bitmap并不是適合所有場景去替換常規(guī)的數(shù)據(jù)存儲
- bit是string類型,最大只能存512MB
- 注意setbit函數(shù)會自動補位,所以生產(chǎn)環(huán)境要注意setbit的偏移量,可能會造成較大的耗時
Hyperloglog
基于HyperLogLog算法,實現(xiàn)用極小空間完成獨立數(shù)量的統(tǒng)計,類型本質是string。
注意:
- 無法保證數(shù)據(jù)完全正確。官網(wǎng)說明錯誤率為0.81%
- 無法取到單條數(shù)據(jù)
GEO
GEO(地理信息定位)是Redis3.2版本發(fā)布的功能,存儲經(jīng)緯度,計算兩地距離,范圍計算等,類型本質是zset。
Redis-sentinel
Redis哨兵是Redis2.8版本發(fā)布的功能,解決Redis集群的故障轉移等痛點,支持高可用。
Redis-cluster
Redis集群是Redis3.0版本發(fā)布的功能,支持分布式
更多內(nèi)容,歡迎關注微信公眾號:全菜工程師小輝~