redis 簡單整理——redis 的集合基本結構和命令[五]
前言
簡單介紹一下集合的基本結構和命令。
正文
集合(set)型別也是用來儲存多個的字串元素,但和列表型別不一 樣的是,集合中不允許有重複元素,並且集合中的元素是無序的,不能通過 索引下標獲取元素。
一個集合最多可以儲存232-1個元 素。Redis除了支援集合內的增刪改查,同時還支援多個集合取交集、並 集、差集,合理地使用好集合型別,能在實際開發中解決很多實際問題。
簡單介紹一下命令:
sadd 提供新增程式:
srem 表示刪除:
scard key 表示集合個數:
sismember key element 檢視某個元素是否在集合中。
srandmember key count 隨機從集合中取出幾個數字。
spop key count 隨機從集合中彈出幾個數字。
上面也提及到了smembers 表示列出全部資料。
下面就是一些集合之間的操作了。
求兩個集合的交集:
求兩個集合的並集:
求多個集合的差集:
圖片:
將交集、並集、差集的結果儲存:
sinterstore destination key [key ...]
suionstore destination key [key ...]
sdiffstore destination key [key ...]
集合常用命令時間複雜度:
內部編碼:
集合型別的內部編碼有兩種:
·intset(整數集合):當集合中的元素都是整數且元素個數小於set-max- intset-entries配置(預設512個)時,
Redis會選用intset來作為集合的內部實 現,從而減少記憶體的使用。
·hashtable(雜湊表):當集合型別無法滿足intset的條件時,Redis會使 用hashtable作為集合的內部實現
使用場景
集合型別比較典型的使用場景是標籤(tag)。
例如一個使用者可能對娛 樂、體育比較感興趣,另一個使用者可能對歷史、新聞比較感興趣,這些興趣 點就是標籤。
有了這些資料就可以得到喜歡同一個標籤的人,以及使用者的共 同喜好的標籤,這些資料對於使用者體驗以及增強使用者黏度比較重要。
例如一 個電子商務的網站會對不同標籤的使用者做不同型別的推薦,比如對數碼產品 比較感興趣的人,在各個頁面或者通過郵件的形式給他們推薦最新的數碼產 品,通常會為網站帶來更多的利益。
示例:
給使用者新增標籤
sadd user:1:tags tag1 tag2 tag5
sadd user:2:tags tag2 tag3 tag5 ...
sadd user:k:tags tag1 tag2 tag4 ...
或者給標籤新增使用者:
sadd tag1:users user:1 user:3
sadd tag2:users user:1 user:2 user:3 ...
sadd tagk:users user:1 user:2 ...
刪除使用者標籤:
srem user:1:tags tag1 tag5
刪除標籤下的使用者:
srem tag1:users user:1
srem tag5:users user:1
計算使用者共同感興趣的標籤:
sinter user:1:tags user:2:tags
其他的一些需求:
sadd=Tagging(標籤)
·spop/srandmember=Random item(生成隨機數,比如抽獎)
·sadd+sinter=Social Graph(社交需求)
結
下一節有序集合。