Redis集合學習記錄

Redis的集合是一種無序的結構,它之中存儲的是一些互不相同的元素,它不像Redis列表結構那樣有序排列,故它也沒有索引取值、隊列、棧的功能。

命令

SADD

SADD set element [element ...]

將一個或多個元素添加到集合中,若集合中已存在要添加的元素,則添加時的對應元素會被忽略,該命令最終返回添加成功的元素數量。

SREM

SREM set element [element ...]

將一個或多個元素從集合中移除,該命令返回移除成功的元素數量,該命令將忽略不存在的元素,只移除存在的元素。

SMOVE

SMOVE source_set target_set element

將一個元素從一個集合移動到另一個集合。該命令移動成功返回1,移動失敗返回0。若源集合中不存在該元素,則移動失敗(返回0);若目標集合中已有該元素,則目標集合中的元素不變(也相當於目標集合中的對應元素被覆蓋了一遍),但源集合中的元素已經被移走了(命令返回1)。

SMEMBERS

SMEMBERS set

獲得集合中的所有元素。

SCARD

SCARD set

得到集合中的元素個數,即該集合的長度。

SISMEMBER

SISMEMBER set element

判斷給定的元素是否存在於集合當中。該命令返回1表示存在,返回0表示不存在。

SRANDMEMBER

SRANDMEMBER set [count]

隨機返回集合中指定數量的元素,若不指定count,則默認返回一個。注意,該命令只會返回對應的元素,集合中對應的元素還是存在的,即不會被移除。若count是正數,則返回count個不重複的元素;若count大於集合的長度,則返回集合中的所有元素;若count爲負數,則返回count的絕對值個元素,但這count絕對值個元素可能有重複的,這時,若count的絕對值大於集合的長度,則還是會返回count絕對值個元素,因爲可以允許返回的元素重複。

SPOP

SPOP key [count]

該命令可以與上面的SRANDMEMBER命令作對比。該命令也是返回指定數量的元素,但是返回後,集合中對應的元素也被移除了。該命令的指定數量只能爲正數。

SINTER SINTERSTORE

SINTER set [set ...]
SINTERSTORE destination_key set [set ...]

SINTTER命令對給定的所有集合求交集,然後返回這個交集包含的元素。
SINTERSTORE這個命令對所有的集合求交集,然後將對應的交集計算結果存儲到給定的鍵裏面,該命令執行之前會先刪除給定的鍵。該命令返回交集計算結果的元素數量。

SUNION SUNIONSTORE

SUNION set [set ...]
SUNIONSTORE destination_key set [set ...]

對給定的所有集合求並集。其餘操作與上面的交集命令類似。

SDIFF SDIFFSTORE

SDIFF set [set ...]
SDIFFSTORE destination_key set [set ...]

對給定的所有集合從左向右依次求差集,例如命令“SDIFF s1 s2 s3”,則它對應的操作是:(s1-s2)-s3。其餘的操作與交集命令類似。

總結

集合是一種存儲不重複元素的無序結構。正是因爲這種特性,它的功能經常能用於社交方面,比如一條微博的點贊(獲取點贊人SMEMBERS、獲取點贊數SCARD,添加點贊SADD、移除點贊SREM);微博的關注列表、粉絲列表;抽獎(SRANDMEMBER、SPOP)等。
另外要注意SRANDMEMBER與SCARD的區別。
最後,對於求交集、並集、差集運算會使用大量的計算資源,故應儘量將計算結果存儲起來以在後面複用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章