redis數據類型
redis數據類型有5種,分別是string、list、set、hash、zset,他們在各自領域裏面都有哪些實踐“應用場景”呢,請繼續看完下面內容。
string(字符串)
也是我們最常用的數據類型,通常用於將數據轉換後存儲到到Redis緩存,常用的方法有set和get方法,這裏就不做過多介紹。
- 計數器
INCR article:readcount:{文章id} - Web集羣session共享
Spring session + redis實現session共享 - 分佈式系統全局序列號
INCRBY orderId 1000 //批次生成
list(鏈表)
- 微信公衆號和微博消息
- 例如小馬哥關注了InfoQ,阿里技術等大V
1)InfoQ發公衆號消息,消息ID爲10010
LPUSH msg:{小馬哥-ID} 10010
2)阿里技術發公衆消息,消息ID爲10016
LPUSH msg:{小馬哥-ID} 10016
3)查看最新的公衆號消息
LRANGE msg:{小馬哥-ID} 0 5
- 支付寶或者微信訂單查詢
如何處理表一對多關係的設計,以訂單爲例子
1)用戶libiao有多個訂單,訂單key爲order:1,order:2,order:3,結合hmset
hmset order:1 orderId 1 orderName:瑞信咖啡 money 36.6 time 2020-05-20
hmset order:2 orderId 1 orderName:京東商城 money 38.6 time 2020-05-20
hmset order:3 orderId 1 orderName:瑞信咖啡 money 39.6 time 2020-05-20
2)把訂單信息的key放入隊列
lpush user:libiao:order order:1 order:2 order:3
3)新產生一個訂單order:4
hmset order:4 orderId 1 orderName:微信紅包 money 49.6 time 2020-05-21
4)追加一個order:4放入隊列第一個位置
lpush user:libiao:order order:4
5)當需要查詢用戶訂單記錄時
List orderKeys = lrange user:libiao:order 0 -1 //查詢user:libiao所有訂單key值
for (Order order: orderKeys){
hmget order:{1}
}
set(集合)
-
抽獎功能,支付寶內抽取華爲P40商品,點擊【參與抽獎】按鈕,到底發生了什麼?
1)點擊參與抽獎加入集合
SADD raffle:product-0001 {userId}
2)查看抽獎所有用戶
SMEMBERS raffle:product-0001
3)抽取count名中獎者
SRANDMEMBER raffle:product-0001 [count]或SPOP raffle:product-0001 [count] -
電商商品篩選,究竟是如何實現?
實現分類搜索
SADD brand:huawei P40
SADD brand:xiaomi mi-10
SADD brand:iphone iphone11
SADD os:android P40 mi-11 (按照操作系統放入集合)
SADD cpu:brand:intel P40 mi-11(按照CPU放入集合)
SADD ram:8g P40 mi-11 iphone11
(1) 查詢android系統,CPU是Intel,8G內存手機,取交集
SINTER os:android cpu:brand:intel ram:8g—>{P40, mi-11}
(2) 查詢iphone品牌,8G內存的手機,取交集
SINTER brand:iphone ram:8g—>{iphone11} -
微信微博點贊、收藏、標籤功能
1)點贊
SADD like:{消息ID} {用戶ID}
2)取消點贊
SREM like:{消息ID}{用戶ID}
3)檢查用戶是否點過贊
SISMEMBER like:{消息ID}{用戶ID}
4)獲取點讚的用戶列表
SMEMBERS like:{消息ID}
5)獲取點贊用戶數
SCARD like:{消息ID} -
微博微信實現關注模型
1) 例如小馬哥關注人如下
mySet -> {mht,lyh,lj} 小馬哥關注了馬化騰,李彥宏,雷軍;
2) 馬化騰關注人如下
mhtSet -> {lqd,lyh,lj} 馬騰哥關注了劉強東,李彥宏,雷軍;
3)劉強東關注人如下
lqdSet -> {lqd,lyh,ncm} 馬騰哥關注了劉強東,李彥宏,奶茶妹;
- 小馬哥和馬騰哥共同關注的人
SINTER mySet mhtSet -> {lyh,lj} - 小馬哥關注的人也關注他(雷軍)
SISMEMBER mySet lj - 小馬哥可能認識的人
SDIFF mySet mhtSet ->{lqd}
zset(排序集合)
- 實現排行榜功能
1)點擊新聞
ZINCRBY hostNew:20200520 1 {msgID:李現衝浪}
2)展示當日排行前十
ZREVRANGE hostNew:20200520 0 9 WITHSCORES
3)七日搜索榜單計算
ZUNIONSTORE hostNew:20200520-20200527 7 hostNew:20200520 hostNew:20200521…hostNew:20200527
4)展示七日排行前十
ZREVRANGE hostNew:20200520-20200527 0 9 WITHSCORES