1. 程式人生 > 實用技巧 >Redis資料型別的應用業務場景分析

Redis資料型別的應用業務場景分析

這篇文章主要針對Redis中不同資料型別在各種業務場景下的應用進行一個介紹,以加深我們對Redis中資料類特性和操作的概念印象。

字串

擴充套件操作

業務場景
大型企業級應用中,分表操作是基本操作,使用多張表儲存同類型資料,但是對應的主鍵id必須保證統一性,不能重複。Oracle資料庫具有sequence設定,可以解決該問題,但是MySQL資料庫並不具有類似的機制,那麼如何解決。

解決方案
不要讓資料庫進行主鍵自增,而是由Redis來控制主鍵的增減操作。

建立字串物件,並且其中儲存的純數字。

  • 設定數值資料增加指定範圍的值
incr key
incrby key increment
incrbyfloat
  • 設定數值資料減少的指定範圍的值
decr key
decrby ke increment

String作為數值操作

  • string在redis內部儲存預設就是一個字串,當遇到增減類操作incr,decr時會轉成數值型進行計算。
  • redis所有的操作都是原子性的,採用單執行緒處理所有業務,命令是一個一個執行的,因此無需考慮併發帶來的資料影響。
  • 注意:按數值進行操作的資料,如果原始資料不能轉成數值,或超過了redis數值上線範圍,將會報錯。9223372036854775807 (java中long型資料最大值,Long.MAX_VALUE)。

資料時效性

業務場景
微信上的投票,每個微訊號每4個小時只能投1票;電商商家開啟熱門商品推薦,熱門商品不能一直處於熱門期,每種商品熱門期維持3天,3天后自動取消;熱門新聞網站會出現熱點新聞,熱點新聞最大的特徵是對時效性,如何自動控制熱點新聞的時效性。

解決方案

  • 設定資料具有指定的宣告週期
setex key seconds value
psetex key milliseconds value

熱點資料

業務場景
主頁高頻訪問資訊顯示控制,例如微博上大V主頁顯示粉絲數與微博數量。

解決方案

  • 在Redis中為使用者設定使用者資訊,以使用者主鍵和屬性值作為Redis字串的key,後臺設定定時重新整理策略。
  • 在Redis中可以以Json格式儲存使用者資訊,放到value中,定時重新整理。(也可以用下面的雜湊)

Key的設定約定

由於Redis的資料大部分和資料庫有關係,所以,key的命名需要和資料庫中的相關資訊對應。資料庫中的熱點資料key命名慣例如下:

表名:主鍵名:主鍵值:欄位名
order:id :123123:name

雜湊

如果用字串儲存了Json資料,如果需要修改,那麼就會修改整個字串,顯得十分笨重。字串比較適用於讀取的操作,如果更新操作比較多,還是用雜湊。

購物車

業務場景
電商網站購物車設計與實現。

業務分析

  • 僅分析購物車的redis儲存模型,新增、瀏覽、更改數量、刪除、清空。
  • 購物車於資料庫間持久化同步。
  • 購物車和訂單之間關係,提交購物車:讀取資料生成訂單;商家價格調整:隸屬訂單級別。
  • 未登入使用者購物車資訊儲存:cookie儲存。

解決方案

  • 將使用者的id作為key,每個客戶建立一個雜湊儲存結構對應的購物車資訊。
  • 商品的id作為field,數量作為value。
  • 新增商品:追加全新的field與value。
  • 瀏覽:遍歷雜湊。
  • 更改數量:設定對應field的value。
  • 刪除商品:闡述field。
  • 清空:刪除key。

加速購物車的呈現

利用一個獨立雜湊結構專用於儲存購物車中顯示的資訊,包含文字描述,圖片地址,所屬商家資訊等
1、命名格式:商品id
2、儲存資料:各類資訊

查詢商品資訊的時候,就直接去檢索這個表。

利用hsetnx操作,如果當前key存在有值,那就什麼都不錯,如果沒有值,那就新增。

搶購

業務場景
不同商家,退出不同的商品,需要進行搶購。

解決方案

  • 以商家id作為key。
  • 將參與搶購的商品id作為field。
  • 將對應的商品數量作為value。
  • 搶購時使用降值的方式控制產品數量。

列表

時間順序要求

業務場景

  • 使用者關注列表的顯示順序就是根據時間顯示的。
  • 新聞資訊之類的展示順序根據發生的是新順序。
  • 企業運營過程中,系統產生大量的運營資料,如何保障多臺伺服器操作日誌的同一輸出順序。

** 解決方案**

  • 依賴list的資料具有順序的特徵對資訊進行管理。
  • 使用佇列模型解決多路資訊彙總合併的問題。
  • 使用棧模型解決最新訊息的問題。

集合

操作隨機資料

業務場景
給使用者隨機推送熱門視訊。

業務分析

  • 系統分析出各個分類的最新或最熱點資訊條目並組織成set集合。
  • 隨機挑選其中部分資訊。
  • 配合使用者關注資訊分類中的熱點資訊組織展示的全資訊集合。

解決方案

  • 隨機獲取集合中指定數量的資料。
srandmember key count
  • 隨機獲取集合中某個資料並將資料移除集合
spop key

推薦系統

業務場景

  • 微博的熱門博主推薦。
  • QQ共同好友顯示,好友推薦。
  • 美團的店鋪推薦之類的。

解決方案

  • 求兩個集合的交併差集合。
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
  • 求兩個集合的交併差集合並存儲到指定的集合中。
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
  • 將指定資料從原始集合中移動到目標集合中。
smove source destination member

許可權校驗

業務場景
公司具有很多員工,內部OA系統具有多種角色、業務操作和資料,每個員工也具有一個或者多個的角色,如何進行許可權校驗。

解決方案

  • 依賴set集合資料不重複的特徵,依賴set集合hash儲存結構特徵完成資料過濾與快速查詢。
  • 根據使用者id獲取使用者所有角色。
  • 根據使用者所有角色獲取使用者所有操作許可權放入set集合。
  • 根據使用者所有角色獲取使用者所有資料全選放入set集合。

網站訪問量統計

業務場景
統計網站的訪問量(PV)、獨立訪客(UV)、獨立IP。

解決方案

  • 利用set集合的資料去重特徵,記錄各種訪問資料。
  • 建立string型別資料,利用incr統計日訪問量(PV)。
  • 建立set模型,記錄不同cookie數量(UV)。
  • 建立set模型,記錄不用IP數量(IP)。

黑白名單

業務場景
將惡意使用者拉入黑名單,將可靠的使用者納入白名單。

解決方案

  • 基於經營戰略設定問題使用者發現、鑑別規則。
  • 週期性更新滿足規則的使用者黑名單,加入set集合。
  • 使用者行為資訊達到後與黑名單進行比比對,確認行為去向。
  • 黑名單過濾IP地址:應用於開放遊客訪問許可權的資訊源。
  • 黑名單過濾裝置資訊:應用於限定訪問裝置的資訊源。
  • 黑名單過濾使用者:應用於基於訪問許可權的資訊源。

排序集合

排行榜

業務場景

  • 各類投票排序。
  • 聊天室活躍度排序。
  • 好友親密度排序。

解決方案

  • 獲取資料對應的索引(排名)。
zrank key member
zrevrank key member
  • score 值獲取與修改。
zscore key member
zincrby key increment member

基於時效性控制的任務管理

業務場景

  • 例如時效性的會員機制。
  • 網站定期開啟投票,限時操作,逾期作廢。

解決方案

  • 對於基於時間線限定的任務處理,將處理時間記錄為score值,利用排序功能區分處理的先後順序。
  • 記錄下一個要處理的事件,當到期後處理對應的任務,移除redis中的記錄,並記錄下一個要處理的時間。
  • 當新任務加入時,判定並更新當前下一個要處理的任務時間。
  • 為提升sorted_set的效能,通常將任務根據特徵儲存成若干個sorted_set。例如1小時內,1天內,年度等,操作時逐漸提升,將即將操作的若干個任務納入到1小時內處理佇列中。

帶有權重的任務管理

業務場景
任務佇列和訊息佇列具有權重,根據其優先順序進行不同處理。

解決方案

  • 對於帶有權重的任務,優先處理權重高的任務,採用score記錄權重即可。