redis常用数据类型的场景,你真的用对了么?
關(guān)注微信公眾號“蝦米聊吧”,每天更新一篇技術(shù)文章,文章內(nèi)容涵蓋架構(gòu)師成長必經(jīng)之路應(yīng)掌握的技術(shù),一起學(xué)習(xí),一起交流。
?
redis常用數(shù)據(jù)類型的場景,你真的用對了么?
?
redis常用數(shù)據(jù)類型包含string、hashmap、list、set、sorted set。
?
string類型
1) 單值緩存
set key value
這個沒啥好說的
2) 對象緩存
set? user:1? value(json格式)
3)分布式鎖
setnx product:10001? true //返回1代表獲取鎖成功
setnx product:10001? true //返回0代表獲取鎖失敗
del product:100001?????? //執(zhí)行業(yè)務(wù)完畢刪除key釋放鎖
set product:100001?????? //設(shè)置過期時間(防止程序意外終止導(dǎo)致死鎖)
4)redis 分布式session
5)計數(shù)器
文章瀏覽量計數(shù)(每瀏覽一次文章瀏覽量+1)
incr article:readcount:{文章id}
6)分布式全局id序列號
可以通過redis提前批量生產(chǎn)唯一序列號提升性能,比如高并發(fā)下的訂單id序列
incrby orderId 100001????????
?
hash類型
1) 對象存儲
hset key field value
hset user {userId}? {user object}
?
hash類的數(shù)據(jù)結(jié)構(gòu),主要用來存放一些對象,把一些簡單的對象給緩存起來,后續(xù)操作的時候,你可以直接僅僅修改這個對象中的某個字段的值。
?
典型場景:用戶購物車
?
?
list類型
注:list是一個有序列表,使用得好是可以玩出很多花樣的
使用場景1:棧、隊列
?
使用場景2:微博大V粉絲列表,微博關(guān)注消息推送,訂閱號關(guān)注消息推送等
?
key=大v? value=[a,b,c…]
可以用list存儲一些列表型的數(shù)據(jù)結(jié)構(gòu),如:粉絲列表、文章評論列表之類。
另外可以通過lrange命令,從某個元素開始讀取某段范圍的數(shù)據(jù),可以基于list實現(xiàn)分頁查詢,基于redis實現(xiàn)簡單的高性能分頁,可以做類似微博那種下拉不斷分頁的效果,性能很高。
?
set類型
注:set集合是一個無序集合,自動去重,因此可以通過set做數(shù)據(jù)的全局去重。
使用場景1:微信抽獎小程序
srandmember key [count]:從集合中隨機(jī)獲取count名用戶(不會刪除)
spop key [count]:隨機(jī)從集合中移除并返回這個被移除的元素
?
使用場景2:微信微博點贊、收藏、標(biāo)簽
使用場景3:關(guān)注模型
?
通過sdiff、sinter、sunion實現(xiàn)集合的交集(比如微博的共同關(guān)注列表)、并集、差集(可能感興趣的人)等
?
?
sorted set類型
這是一個排序的set,可以去重也可以排序,比如存儲的時候設(shè)置一個分?jǐn)?shù),則可以自動根據(jù)分?jǐn)?shù)排序,最大的特點就是有個分?jǐn)?shù)可以通過自定義排序規(guī)則。
最常見的使用場景:排行榜
即將每個用戶以及對應(yīng)的分?jǐn)?shù)寫入,就可以獲取top 10的用戶,也可以獲取到排行榜里的排名情況。
命令:zadd、zrevrange
?
圖片摘自網(wǎng)絡(luò)。
?
關(guān)注微信公眾號“蝦米聊吧”,獲取更多知識資料干貨~,一起交流,一起學(xué)習(xí)~,
一起打卡學(xué)習(xí),一起交流進(jìn)步吧!
微信掃描二維碼,關(guān)注我的公眾號
?
總結(jié)
以上是生活随笔為你收集整理的redis常用数据类型的场景,你真的用对了么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 香港高防服务器和普通服务器的区别有哪些
- 下一篇: redis过期策略和淘汰机制你知道多少?