集合,是一組無序且唯一的資料集。
在實際應用中,可以應用於“標籤”、“屬性”,這類需經常擴充套件或組合查詢的場景
基礎命令
增加
// 如果元素已存在,則忽略該命令(該命令具有批量功能)。返回成功加入的元素數量
SADD key_name member [other members]
刪除
// 刪除元素(該命令具有批量功能)。返回刪除成功的個數
SREM key_name member [other members]
獲取全部
// 返回集合下的所有元素
SMEMBERS key_name
判斷是否存在
// 存在返回 1,不存在返回 0
SISMEMBER key_name member
集合運算
去同
// 返回 key_name1 中剔除 key_name2 中相同元素的部分
SDIFF key_name1 key_name2 [其他 keys]
交集
// 返回 key_name1 和 key_name2 的交集
SINTER key_name1 key_name2 [其他 keys]
並集
// 返回 key_name1 和 key_name2 的並集
SUNION key_name1 key_name2 [其他 keys]
其他命令
獲取元素個數
// 返回元素個數
SCARD key_name
集合運算並儲存結果
去同
// 結果儲存在 destination 鍵中,可用於多步集合運算
SDIFFSTORE destination key_name [key_names...]
交集
SINTERSTORE destination key_name [key_names...]
並集
SUNIONSTORE destination key_name [key_names ...]
隨機獲取元素
// 無 count 時,隨機獲取一個元素
// count > 0 時,隨機獲取 count 個不重複的元素,如果 count 大於集合元素數時,返回全部
// count < 0 時,隨機獲取 |count| 個元素(可能重複)
SRANDMEMBER key_name [count]
彈出一個元素
// 隨機選擇一個元素彈出
SPOP key_name
有序集合,同集合一致,但為每個元素關聯了一個分數,使我們能夠獲得分數最高或最低的前 N 個元素,當然也可按範圍獲取元素
但有序集合更加消耗記憶體,讀取任意位置的資料都會很快,更加便捷的排序調整
基礎命令
增加元素
// 返回新加入集合的元素個數
// score 可以為 integer 或 float,也可為 -inf(負無窮)或 +inf(正無窮)
ZADD key_name score member [other scores members]
// 更新,將原 member 的 score 調整為 new_score
ZADD key_name new_score member
刪除一個或多個元素
// 返回成功刪除的元素個數
ZREM key_name memeber [other members]
獲得元素的分數
// 返回分數
ZSCORE kye_name member
獲得排名在某個範圍的元素列表
// 首先按照分數從小到大排序
// (如果元素的分數相同,則對 member 按照字典順序排列 “0”<...“9”<“A”<...“Z”<“a”...<“z”)
// 再根據索引(0 開始)結合 start 和 end 的要求返回元素
// 當加上 WITHSCORE 時,同時返回分數
ZRANGE key_name start end [WITHSCORE]
// 按照分數從大到小,其他同 ZRANGE
ZREVRANGE key_name start end [WITHSCORE]
獲得指定分數範圍的元素
// 首先會對 key_name 按從小到大排列
// 返回分數在 min 和 max 之間的元素(注意:包含 min 和 max)
ZRANGEBYSCORE key_name min max [WITHSCORE] [LIMIT offset count]
// LIMIT 可在檢索的結果中,偏移(往後數)offset 個位置,取 count 個元素
// 在 students 集合中獲取分數為 70 ~ 100 分之間,並跳過前 2 個,取 3 個元素
ZRANGEBYSCORE students 70 100 WITHSCORE LIMIT 2 3
// 不希望包含 min 或 max 時,使用“(”(同數學中的集合符號,( 不包含,[ 包含)
ZRANGEBYSCORE key_name 80 (100
// 按從大到小排列,其他一致
ZREVRANGEBYSCORE key_name min max [WITHSCORE] [LIMIT offset count]
調整某個元素的分數
// 給元素增加 increment 的分值,返回更改後的分數
// increment 可以為正(加),也可以為負(減)
// 如果指定元素不存在,則先建立,初始化為 0,再調整
ZINCRBY key_name increment member
其他命令
獲取集合中元素的數量
// 返回個數
ZCARD key_name
獲得指定分數範圍內的元素個數
// 同 ZRANGEBYSOCRE 中的 min 和 max 一致
// 包含 min 和 max,不包含的話,可以使用“(”
ZCOUNT key_name min max
按照排名範圍刪除元素
// 先從小到大排列,再根據索引位置,刪除 start 和 end 間的所有元素(注意:包含 start 和 end)
// 返回刪除元素個數
ZREMRANGEBYRANK key_name start end
按照分數範圍刪除元素
// 刪除分數範圍內的所有元素
ZREMRANGEBYSCORE key_name min max
獲取元素的排名
// 從小到大排列,返回索引值(0 開始)
ZRANK key_name member
// 從大到小排列,返回索引值(0 開始)
ZREVRANK key_name member
目標
- 使用集合型別,為任務管理系統增加標籤功能
- 為每條 task 定義一個 task:id:tags(集合)的鍵儲存標籤
- 為每個標籤,定義一個 tag:name:count 儲存都有哪些 task 使用了該 tag:name
- 可按標籤分類檢索
- 使用有序集合型別,實現文章按照日期排序的功能(新增、更新都會觸發日期的更新),task:sort