集合

集合也是用來保存多個的字符串元素

集合特點

  • 集合中不允許有重複元素
  • 集合中的元素是無序的
  • 不能通過索引下標獲取元素

一個集合最多可以存儲

個元素。

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不會

注意
smemberslrangehgetall 都是屬於比較重的命令,如果元素過多,會存在阻塞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 (社交需求)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章