Redis學習(3)-使用場景

Redis的常用數據類型

String 使用場景

Key的設計注意事項

一般以業務功能模塊: 比如購物車key: cart:001,表示1號用戶的購物車,簡短明瞭以主,節約內存。

簡單字符緩存

set key value get key

結構體或對象的存儲
set  user:1 value   //value爲XML或Json格式
mset user:1:name deer user:1:age 18
mget user1:name user:1:age
Redis分佈式鎖
計數功能-點贊

INCR article:001 GET article:001

集羣環境下的Session共享

使用spring session與redis完成session共享

Hash 使用場景

購物車之類–表結構的數據都可以用hash
  1. 全選功能-獲取所有該用戶的所有購物車商品
  2. 商品數量-購物車圖標上要顯示購物車裏商品的總數
  3. 刪除-要能移除購物車裏某個商品
  4. 增加或減少某個商品的數量
    如何設計實現?
hmset cart:001 prod:01 1 prod:02 1
指令說明:當前登錄用戶ID號做爲KEY,商品ID號爲Field, 加入購物車數量爲value

List 使用場景

利用List實現棧、隊列
  1. 先進後出:棧 =LPUSH+LPOP->FILO
  2. 先進先出:隊列=LPUSH + RPOP->FIFO
    Blocking
    MQ(阻塞隊列)=LPUSH +BRPOP

訂閱號發佈消息之類的

Set 使用場景

抽獎功能
微信有一個活動,活動ID爲001,如何實現微信抽獎功能,基於Redis設計實現?
userId: 004 
當Lison點擊參與抽獎時,數據放入set集合
      sadd act:001  004
開始抽獎2名中獎者
      srandmember act:001 2 取出兩個但是不移除
      spop act:001 2 取出兩個並移除
查看有多少用戶參加了本次抽獎
      smembers act:001
用戶關係設計

set的特殊命令

setA={A,B,C}     setB={B, C}
集合與集合之間的交集
sinter setA setB-->得到集合{B,C}
集合與集合之間的並集
sunion setA setB -->得到集合{A,B,C}
集合與集合之間的差集
sdiff  setA setB-->得到集合{A}
1)James老師關注的人
     sadd jamesCares lison,peter,king,av
2)  Lison老師關注的人
     sadd lisonCares james,av,cjk,king
3)  av老師關注的人
     sadd avCares deer,cjk,king
--------------
1)James和lison共同關注的人
     sinter jamesCares lisonCares , 計算結果爲 {av, king}
2) 我關注的人也關注他(king)
     sismember lisonCares king    lisonCares關注king沒
     sismember avCares king      avCares關注king沒
3)我可能認識的人
     SDIFF lisonCares jamesCares-> {james.cjk}

Zset 有序集合

常用於排行榜,如視頻網站需要對用戶上傳視頻做排行榜,或點贊數與集合有聯繫,不能有重複的成員
新聞話題榜
話題榜Redis設計實現, 以日期做爲Key
1)點擊話題增加1
zincrby topic:20190912 1 軍嫂怒懟張馨予
2)  排行實現,展示今日前9排名 從大到小
zrevrange  topic:20190912 0 9  withscores
3)統計近3日點擊數據
zunionstore 新key 統計的key數量  topic:20190910  topic:20190911 topic:20190912
可以加WEIGHTS改變數值
4) 展示近3日的排行前9名
zrevrange topic:20190910-20190912 0 9  withscores
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章