1. 程式人生 > >redis 第 8 篇 Redis資料型別----Sortedset

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