redis用在什么地方?
redis應(yīng)用場景
● 令牌(Token)生成
●?短信驗(yàn)證碼
●?排行榜
●?消息隊(duì)列
Redis 中l(wèi)ist的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)是雙向鏈表,所以可以非常便捷的應(yīng)用于消息隊(duì)列(生產(chǎn)者 / 消費(fèi)者模型)。消息的生產(chǎn)者只需要通過lpush將消息放入 list,消費(fèi)者便可以通過rpop取出該消息,并且可以保證消息的有序性。如果需要實(shí)現(xiàn)帶有優(yōu)先級的消息隊(duì)列也可以選擇sorted set。而pub/sub功能也可以用作發(fā)布者 / 訂閱者模型的消息。無論使用何種方式,由于 Redis 擁有持久化功能,也不需要擔(dān)心由于服務(wù)器故障導(dǎo)致消息丟失的情況。(推薦:《Redis視頻教程》)
如果對于數(shù)據(jù)一致性要求高的話還是用RocketMQ等專業(yè)系統(tǒng)。
由于redis把數(shù)據(jù)添加到隊(duì)列是返回添加元素在隊(duì)列的第幾位,所以可以做判斷用戶是第幾個訪問這種業(yè)務(wù)
隊(duì)列不僅可以把并發(fā)請求變成串行,并且還可以做隊(duì)列或者棧使用
分布式鎖
驗(yàn)證前端的重復(fù)請求,可以通過redis進(jìn)行過濾
秒殺系統(tǒng),基于redis是單線程特征,防止出現(xiàn)數(shù)據(jù)庫“爆破”
全局增量ID生成,類似“秒殺”
計(jì)數(shù)器
諸如統(tǒng)計(jì)點(diǎn)擊數(shù)等應(yīng)用。由于單線程,可以避免并發(fā)問題,保證不會出錯,而且100%毫秒級性能!
計(jì)數(shù)功能應(yīng)該是最適合 Redis 的使用場景之一了,因?yàn)樗哳l率讀寫的特征可以完全發(fā)揮 Redis 作為內(nèi)存數(shù)據(jù)庫的高效。在 Redis 的數(shù)據(jù)結(jié)構(gòu)中,string、hash和sorted set都提供了incr方法用于原子性的自增操作。
例子:
如果應(yīng)用需要顯示每天的注冊用戶數(shù),便可以使用string作為計(jì)數(shù)器,設(shè)定一個名為REGISTERED_COUNT_TODAY的 key,并在初始化時給它設(shè)置一個到凌晨 0 點(diǎn)的過期時間,每當(dāng)用戶注冊成功后便使用incr命令使該 key 增長 1,同時當(dāng)每天凌晨 0 點(diǎn)后,這個計(jì)數(shù)器都會因?yàn)?key 過期使值清零。
每條微博都有點(diǎn)贊數(shù)、評論數(shù)、轉(zhuǎn)發(fā)數(shù)和瀏覽數(shù)四條屬性,這時用hash進(jìn)行計(jì)數(shù)會更好,將該計(jì)數(shù)器的 key 設(shè)為weibo:weibo_id,hash的 field 為like_number、comment_number、forward_number和view_number,在對應(yīng)操作后通過hincrby使hash 中的 field 自增。
如果應(yīng)用有一個發(fā)帖排行榜的功能,便選擇sorted set吧,將集合的 key 設(shè)為POST_RANK。當(dāng)用戶發(fā)帖后,使用zincrby將該用戶 id 的 score 增長 1。sorted set會重新進(jìn)行排序,用戶所在排行榜的位置也就會得到實(shí)時的更新。