Redis常見使用場景
快取、資料共享分布式、分布式鎖、全域 ID、計數器、限流、位統計、購物車、時間線 Timeline、訊息佇列、抽獎、點贊、簽到、打卡、商品標簽、商品篩選、用戶關注、推薦模型、排行榜.
1.快取
String型別
例如:熱點資料快取(例如報表、明星出軌),物件快取、全頁快取、可以提升熱點資料的訪問資料,
2.資料共享分布式
String 型別,因為 Redis 是分布式的獨立服務,可以在多個應用之間共享
例如:分布式Session
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
3.分布式鎖
? String 型別setnx方法,只有不存在時才能添加成功,回傳true
public static boolean getLock(String key) {
Long flag = jedis.setnx(key, "1");
if (flag == 1) {
jedis.expire(key, 10);
}
return flag == 1;
}
public static void releaseLock(String key) {
jedis.del(key);
}
4.全域ID
int型別,incrby,利用原子性; 分庫分表的場景,一次性拿一段
incrby userid 1000
5.計數器
int型別,incr方法
例如:文章的閱讀量、微博點贊數、允許一定的延遲,先寫入Redis再定時同步到資料庫
6.限流
int型別,incr方法
以訪問者的ip和其他資訊作為key,訪問一次增加一次計數,超過次數則回傳false
7.位統計
String型別的bitcount(1.6.6的bitmap資料結構介紹)
# a 對應的ASCII碼是97,轉換為二進制資料是01100001
# b 對應的ASCII碼是98,轉換為二進制資料是01100010
set k1 a
# 6 7 代表的a的二進制位的修改
setbit k1 6 1
setbit k1 7 0
# 因為bit非常節省空間(1 MB=8388608 bit),可以用來做大資料量的統計,
get k1
例如:在線用戶統計,留存用戶統計
setbit onlinecounts 01
setbit onlinecounts 11
setbit onlinecounts 20
支持按位與、按位或等等操作
bitop and destkey key1 key2 ... keyN 對一個或多個 key 求邏輯與,并將結果保存到 destkey
bitop or destkey key1 key2 ... keyN 對一個或多個 key 求邏輯或,并將結果保存到 destkey
bitop xor destkey key1 key2 ... keyN 對一個或多個 key 求邏輯異或,并將結果保存到 destkey
bitop not destkey srckey 對指定 srckey 求邏輯非,并將結果保存到 destkey
計算出7天都在線的用戶
bitop and 7_days_both_online_users day_1_online_users day_2_online_users ... day_7_online_users
8.購物車
String 或hash,所有String可以做的hash都可以做
- key:用戶id;field:商品id;value:商品數量,
- +1:hincr
- -1:hdecr
- 洗掉:hdel
- 全選:hgetall
- 商品數:hlen

9.時間線Timeline
list,雙向鏈表,直接作為timeline就好了,插入有序
10.訊息佇列
List提供了兩個阻塞的彈出操作:blpop/brpop,可以設定超時時間
blpop:blpop key1 timeout 移除并獲取串列的第一個元素,如果串列沒有元素會阻塞串列直到等待超時或發現可彈出元素為止,
brpop:brpop key1 timeout 移除并獲取串列的最后一個元素,如果串列沒有元素會阻塞串列直到等待超時或發現可彈出元素為止,
佇列:先進先出:rpush blpop,左頭右尾,右邊進入佇列,左邊出佇列
堆疊:先進后出:rpush brpop
11.抽獎
自帶一個隨機獲得值
spop myset
12.點贊、簽到、打卡
假如微博ID是WB1001,用戶ID是U3001
用 [ like:WB1001 ] 來維護 WB1001 這條微博的所有點贊用戶
- 點贊了這條微博:sadd like:WB1001 U3001
- 取消點贊:srem like:WB1001 U3001
- 是否點贊:sismember like:WB1001 U3001
- 點贊的所有用戶:smembers like:WB1001
- 點贊數:scard like:WB1001
13.商品標簽

用 [ tags:i5001 ] 來維護商品所有的標簽
sadd tags:i5001 畫面清晰細膩
sadd tags:i5001 真彩清晰顯示屏
sadd tags:i5001 流程至極
14.商品篩選
# 獲取差集
sdiff set1 set2
# 獲取交集(intersection )
sinter set1 set2
# 獲取并集
sunion set1 set2

假如買 iPhone11
sadd brand:apple iPhone11
sadd brand:ios iPhone11
sadd screensize:6.0-6.24 iPhone11
sadd screentype:lcd iPhone 11
過濾商品,蘋果的、ios的、螢屏在6.0-6.24之間的,螢屏材質是LCD螢屏
sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd
15.用戶關注、推薦模型
follow:關注 fans:粉絲
# 相互關注
sadd 1:follow 2
sadd 2:fans 1
sadd 2:follow 1
sadd 1:fans 2
# 我關注的人也關注了他(取交集)
sinter 1:follow 2:fans
# 1可能認識的人(取差集)
sdiff 2:follow 1:follow
# 2可能認識的人(取差集)
sdiff 1:follow 2:follow
16.排行榜
id 為1001 的新聞點擊數加1
zincrby news:20220512 1 1001
獲取今天點擊最多的15條
zrevrange new:20220512 0 15 withsocres
本文來自博客園,作者:颯沓流星,轉載請注明原文鏈接:https://www.cnblogs.com/yushixin1024/p/16368063.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499125.html
標籤:NoSQL
上一篇:Redis的Java客戶端
下一篇:Redis快取更新策略
