深刻學習Redis(五),基本類型【Set】剖析

更多精彩文章,關注【ToBeTopJavaer】,更有數萬元精品vip資源免費等你來拿!!!


本文咱們要剖析的基本類型是Set,下面咱們將深刻源碼剖析Redis中Set的實現。ios

存儲類型:String 類型的無序集合,最大存儲數量 2^32-1(40 億左右)。
如圖所示:

操做命令

添加一個或者多個元素
sadd myset a b c d e f g複製代碼
獲取全部元素
smembers myset複製代碼
統計元素個數
scard myset複製代碼
隨機獲取一個元素
srandmember key複製代碼
隨機彈出一個元素
spop myset複製代碼
移除一個或者多個元素
srem myset d e f複製代碼
查看元素是否存在
sismember myset a複製代碼

存儲( 實現) 原理

Redis 用 intset 或 hashtable 存儲 set。若是元素都是整數類型,就用 inset 存儲。
若是不是整數類型,就用 hashtable(數組+鏈表的存來儲結構)。
相關hashtable的源碼分析,在前面已經分析過了,在此就不重複了。
問題:KV 怎麼存儲 set 的元素?key 就是元素的值,value 爲 null。
若是整數類型元素個數超過 512 個,也會用 hashtable 存儲。
配置文件 redis.conf 中配置屬性以下

應用場景

抽獎

隨機獲取元素
spop myset

點贊、 簽到、 打卡

這條微博的 ID 是 t1001,用戶 ID 是 u3001。
用 like:t1001 來維護 t1001 這條微博的全部點贊用戶。
點讚了這條微博:sadd like:t1001 u3001
取消點贊:srem like:t1001 u3001
是否點贊:sismember like:t1001 u3001
點讚的全部用戶:smembers like:t1001
點贊數:scard like:t1001
比關係型數據庫簡單許多。

商品標籤

用 tags:i5001 來維護商品全部的標籤。
sadd tags:i5001 畫面清晰細膩
sadd tags:i5001 真彩清晰顯示屏
sadd tags:i5001 流暢至極

商品篩選

獲取差集
sdiff set1 set2複製代碼
獲取交集(intersection )
sinter set1 set2複製代碼
獲取並集
sunion set1 set2複製代碼
iPhone11 上市了。
sadd brand:apple iPhone11
sadd brand:ios iPhone11
sad screensize:6.0-6.24 iPhone11
sad screentype:lcd iPhone11
篩選商品,蘋果的,iOS 的,屏幕在 6.0-6.24 之間的,屏幕材質是 LCD 屏幕
sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd


更多精彩文章,關注【ToBeTopJavaer】,更有數萬元精品vip資源免費等你來拿!!!

                              

相關文章
相關標籤/搜索