Redis常見應用場景

IT王小二發表於2021-06-08

Redis常見應用場景。

如果還不清楚Redis常用操作指令請訪問 Redis入門,或者訪問 文件網站

一、String 場景

  • 計數功能:例如掘金文章點選數量,閱讀數量。
  • 叢集環境下的session共享。

二、Hash 場景

各種 商城購物車 (淘寶,京東。。)

設計思路

  1. 購物車繫結了 userId
  2. 商品id作為feild,商品數量作為value。

模擬過程

// 初始化購物車資料
hmset userId:1 prod:1 1 prod:2 3 prod:3 4

// 增加商品 prod:1 購買數量為2件時
hincrby userId:1  prod:1 1

// 減少商品 prod:2 數量為1件時
hincrby userId:1 prod:2 -2

// 刪除商品 prod:1 時
hdel userId:1 prod:1

// 統計商品數
hlen userId:1

三、List 場景

微信公眾號訂閱訊息

設計思路

公眾號釋出訊息時,向訂閱本公眾號的使用者(mess:1)推送(將訂閱訊息id通過lpush放入使用者的list中),模擬過程。

模擬過程

// 推送訊息
lpush mess:1 999
lpush mess:1 1000
lpush mess:1 1010

// 檢視訊息,返回結果1010 1000 999
lrange mess:1 0 -1

四、Set 場景

限時抽獎活動:例如微信有個活動,活動id為2,如何基於Redis設計實現。

設計思路

使用者點選立即參與後,將使用者id儲存到活動id的集合中,利用Set集合的元素唯一性可檢視參加使用者、參加使用者數量等等。

模擬過程

// 使用者user:1 user:2 user:3參加抽獎活動act:888
sadd act:888 user:1 user:2 user:3

// 模擬一次性隨機抽獎1名
srandmember act:888

// 模擬兩次抽獎,兩次抽獎不重複,使用spop命令,抽取中的使用者會從set中移除
spop act:888
spop act:888

好友關係:共同關注,我關注的人也關注了他,我可能認識的人

注: 如果資料量大的情況下使用大資料分析

設計思路:兩個集合取交集

模擬過程

// 三個使用者關注的人
sadd user:1 zhangsan lisi wangwu
sadd user:2 zhangsan liliu wanger wangwu
sadd user:3 list wangwu liliu

// user:1和user:2共同關注的人,取交集,返回zhangsan wangwu
sinter user:1 user:2

五、zSet 場景

各種榜單

例如百度新聞排名

設計思路

將新聞id作為member,點選次數設定為score,每點選一次score+1,當然,為了每日榜單,member在設計時可以加上字尾用於日期區分,例如news:20191216、news:20191217 。

模擬過程

// 增加熱點新聞
zadd topic:20191216 100 new:1 200 new:2 150 new:3 500 new:4

// new:1點選了120次,點選數變為220
zincrby topic:20191216 120 new:1

// 檢視今日排行前3名,返回 new:4 500 new:1 220 new:2 200
zrevrange topic:20191216 0 2 withscores

zadd topic:20191217 110 new:1 200 new:2 150 new:3 100 new:4
zadd topic:20191218 110 new:5 200 new:2 150 new:6 100 new:7
// 合併三日的資料
zunionstore topic:3day 3 topic:20191216 topic:20191217 topic:201912168
// 檢視近三日排行榜前三名,返回new:4 600 new:2 600 new:1 330
zrevrange topic:3day 0 2 withscores

都讀到這裡了,來個 點贊、評論、關注、收藏 吧!

文章作者:IT王小二
首發地址:https://www.itwxe.com/posts/234ceb73/
版權宣告:文章內容遵循 署名-非商業性使用-禁止演繹 4.0 國際 進行許可,轉載請在文章頁面明顯位置給出作者與原文連結。

相關文章