Redis sorted set 类型操作及常用命令
七個原則
Sorted Set 類型及操作
sorted set 是 set 的一個升級版本, 它在 set 的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定后, zset 會自動重新按新的值調整順序。可以理解為有兩列的 mysql 表,一列存 value,一列存順序。操作中 key 理解為 zset 的名字。
和 set 一樣 sorted set 也是 string 類型元素的集合,不同的是每個元素都會關聯一個 double類型的 score。sorted set 的實現是 skip list 和 hash table 的混合體。
當元素被添加到集合中時,一個元素到 score 的映射被添加到 hash table 中,所以給定一個元素獲取 score 的開銷是 O(1),另一個 score 到元素的映射被添加到 skip list,并按照 score 排序,所以就可以有序的獲取集合中的元素。添加,刪除操作開銷都是 O(log(N))和 skip list 的開銷一致,redis 的 skip list 實現用的是雙向鏈表,這樣就可以逆序從尾部取元素。 sorted set 最經常的使用方式應該是作為索引來使用.我們可以把要排序的字段作為 score 存儲,對象的 id 當元素存儲。、
常用命令及操作
zadd
向名稱為 key 的 zset 中添加元素 member, score 用于排序。如果該元素已經存在,則根據score 更新該元素的順序。
127.0.0.1:6379> zadd myzset 1 Jacob (integer) 1 127.0.0.1:6379> zadd myzset 2 Jacob2 (integer) 1 127.0.0.1:6379> zadd myzset 3 Jacob2 (integer) 0 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob" 2) "1" 3) "Jacob2" 4) "3"zrem
刪除名稱為 key 的 zset 中的元素。
127.0.0.1:6379> zrem myzset Jacob2 (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob" 2) "1"zincrby
如果在名稱為 key 的 zset 中已經存在元素 member,則該元素的 score 增加 increment;否則向集合中添加該元素,其 score 的值為 increment。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob" 2) "1" 127.0.0.1:6379> zincrby myzset 2 Jacob "3" 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob" 2) "3"zrank
返回名稱為 key 的 zset 中 member 元素的排名(按 score 從小到大排序)即下標。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 5) "Jacob" 6) "3" 127.0.0.1:6379> zrank myzset Jacob3 (integer) 1Jacob3 的下標是 1,我這里取的是下標,而不是 score 。
zrevrank
返回名稱為 key 的 zset 中 member 元素的排名(按 score 從大到小排序)即下標。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 5) "Jacob" 6) "3" 127.0.0.1:6379> zrevrank myzset Jacob3 (integer) 1zrevrange
返回名稱為 key 的 zset(按 score 從大到小排序)中的 index 從 start 到 end 的所有元素。
127.0.0.1:6379> zrevrange myzset 0 -1 withscores 1) "Jacob" 2) "3" 3) "Jacob3" 4) "2" 5) "Jacob2" 6) "1"zrangebyscore
返回集合中 score 在給定區間的元素。
127.0.0.1:6379> zrangebyscore myzset 2 3 withscores 1) "Jacob3" 2) "2" 3) "Jacob" 4) "3"zcount
返回集合中 score 在給定區間的數量。
127.0.0.1:6379> zcount myzset 1 3 (integer) 3 127.0.0.1:6379> zcount myzset 1 2 (integer) 2zcard
返回集合中元素個數。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 5) "Jacob" 6) "3" 127.0.0.1:6379> zcard myzset (integer) 3zscore
返回給定元素對應的 score 。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 5) "Jacob" 6) "3" 127.0.0.1:6379> zscore myzset Jacob "3"zremrangebyrank
從小到大排序,刪除集合中排名在給定區間的下標元素。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 5) "Jacob" 6) "3" 127.0.0.1:6379> zscore myzset Jacob "3" 127.0.0.1:6379> zremrangebyrank myzset 2 2 (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2"zremrangebyscore
從小到大排序,刪除集合中 score 在給定區間的元素。
127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1" 3) "Jacob3" 4) "2" 127.0.0.1:6379> zremrangebyscore myzset 2 3 (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "Jacob2" 2) "1"總結
以上是生活随笔為你收集整理的Redis sorted set 类型操作及常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 犀牛6.0grasshopper翻译插件
- 下一篇: 第三十六期:如果把线程当作一个人来对待,