更多精彩文章,關注公衆號【ToBeTopJavaer】,更有數萬元精品vip資源免費等你來拿!!!
本文咱們要剖析的基本類型是Set,下面咱們將深刻源碼剖析Redis中Set的實現。ios
存儲類型:String 類型的無序集合,最大存儲數量 2^32-1(40 億左右)。redis
如圖所示:數據庫
操做命令數組
添加一個或者多個元素app
sadd myset a b c d e f g
獲取全部元素源碼分析
smembers myset
統計元素個數spa
scard myset
隨機獲取一個元素3d
srandmember key
隨機彈出一個元素code
spop myset
移除一個或者多個元素blog
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資源免費等你來拿!!!
``