Redis常見使用場景,緩存、數據共用分散式、分散式鎖、全局 ID、計數器、限流、位統計、購物車、時間線 Timeline、消息隊列、抽獎、點贊、簽到、打卡、商品標簽、商品篩選、用戶關註、推薦模型、排行榜. ...
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