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