1. 程式人生 > 其它 >redis 簡單整理——redis 的集合基本結構和命令[五]

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(社交需求)

下一節有序集合。