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

更多精彩文章,關注公衆號【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

存儲( 實現) 原理

Redisintsethashtable存儲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資源免費等你來拿!!!``

                         

相關文章
相關標籤/搜索