redis 第 8 篇 Redis資料型別----Sortedset
Sortedset
Sortedset又叫zset
Sortedset是有序集合,可排序的,但是唯一。
Sortedset和set的不同之處,是會給set中的元素新增一個分數,然後通過這個分數進行排序。
命令
增加元素
向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素。
語法:ZADD key score member [score member ...]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu (integer) 3 127.0.0.1:6379> zadd scoreboard 97 lisi (integer) 0 |
獲取元素的分數
語法:ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi "97" |
刪除元素
移除有序集key中的一個或多個成員,不存在的成員將被忽略。
當key存在但不是有序集型別時,返回一個錯誤。
語法:ZREM key member [member ...]
127.0.0.1:6379> zrem scoreboard lisi (integer) 1 |
獲得排名在某個範圍的元素列表
獲得排名在某個範圍的元素列表
- 按照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
語法:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrange scoreboard 0 2 1) "zhangsan" 2) "wangwu" 3) "lisi“ |
- 按照元素分數從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)
語法:ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zrevrange scoreboard 0 2 1) " lisi " 2) "wangwu" 3) " zhangsan “ |
如果需要獲得元素的分數的可以在命令尾部加上WITHSCORES引數
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES 1) "zhangsan" 2) "80" 3) "wangwu" 4) "94" |
獲取元素的排名
- 從小到大
語法:ZRANK key member
127.0.0.1:6379> ZRANK scoreboard lisi (integer) 0 |
- 從大到小
語法:ZREVRANK key member
127.0.0.1:6379> ZREVRANK scoreboard zhangsan (integer) 1 |
其它命令
獲得指定分數範圍的元素
語法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES 1) "wangwu" 2) "94" 3) "lisi" 4) "97" 127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2 1) "wangwu" 2) "lisi" |
增加某個元素的分數
返回值是更改後的分數
語法:ZINCRBY key increment member
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi "101“ |
獲得集合中元素的數量
語法:ZCARD key
127.0.0.1:6379> ZCARD scoreboard (integer) 3 |
獲得指定分數範圍內的元素個數
語法:ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90 (integer) 1 |
按照排名範圍刪除元素
語法:ZREMRANGEBYRANK key start stop
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1 (integer) 2 127.0.0.1:6379> ZRANGE scoreboard 0 -1 1) "lisi" |
按照分數範圍刪除元素
語法:ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zadd scoreboard 84 zhangsan (integer) 1 127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100 (integer) 1 |
應用
商品銷售排行榜
需求:根據商品銷售量對商品進行排行顯示
思路:定義商品銷售排行榜(sorted set集合),Key為items:sellsort,分數為商品銷售量。
寫入商品銷售量:
- 商品編號1001的銷量是9,商品編號1002的銷量是10
192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002 |
- 商品編號1001的銷量加1
192.168.101.3:7001> ZINCRBY items:sellsort 1 1001 |
- 商品銷量前10名:
192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores |