集合也是用來保存多個的字符串元素
集合特點
- 集合中不允許有重複元素
- 集合中的元素是無序的
- 不能通過索引下標獲取元素
個元素。
redis 支持集合內的增刪改查,同時也支持多個集合取交集、並集、差集。
命令
集合內操作
- 添加元素
sadd key element [element ...]
- 刪除元素
srem key element [element ...]
- 計算元素個數
scard key
時間複雜度爲O(1) , 不會遍歷集合所有元素,而是直接使用redis的內部變量 - 判斷元素是否在集合中
sismember key element
- 隨機從集合中返回指定個數的元素
srandmember key [count]
不寫count,默認數量是1 - 從集合隨機彈出元素
spop key [count]
- 獲取所有元素
smembers key
spop 和 srandmember的區別
相同點 | 不同點 |
---|---|
都是隨機從集合中選出元素 |
spop 命令執行後,元素會從集合中刪除,而srandmember 不會 |
注意
smembers
和lrange
、hgetall
都是屬於比較重的命令,如果元素過多,會存在阻塞Redis的可能性。這時候可以使用sscan來完成。
集合間操作
- 求多個集合的交集
sinter key [key ...]
- 求多個集合的並集
sunion key [key ...]
- 求多個集合的差集
sdiff key [key ...]
- 將交集、並集、差集的結果保存
sinterstore destination key [key ...]
sunionstore destination key [key ...]
sdiffstore destionation key [key ...]
內部編碼
- intset (整數集合) 當集合中的元素都是整數且小於配置set- max- intset- entries時
- hashtable (哈希表)
使用場景
- sadd = Tagging (標籤)
- spop/srandmember = Random item (生成隨機數 ,比如抽獎)
- sadd + sinter = Social Graph (社交需求)