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






