1. 程式人生 > 實用技巧 >Redis五大資料型別——Zset(有序集合)

Redis五大資料型別——Zset(有序集合)

Redis五大資料型別——Zset(有序集合)

在set的基礎上,增加了一個值,例如:

  • set的用法是,set k1 v1,
  • 而zset則是,zset k1 score1 v1,而這裡的score就是用來排序

總結就是,新增欄位的時候加一個標誌

ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

127.0.0.1:6379> ZADD zset 1 v1
(integer) 1
127.0.0.1:6379> ZADD zset 2 v2 3 v3
(integer) 2
127.0.0.1:6379> ZRANGE zset 0 -1		# ZRANGE key start stop [WITHSCORES]
1) "v1"									# 檢視指定的key中,start到stop這個閉區間的所有值
2) "v2"
3) "v3"
127.0.0.1:6379> ZADD zset 0 v0			# 插入一個0
(integer) 1
127.0.0.1:6379> ZRANGE zset 0 -1		# 可以看到,0對應的值排在了第一位
1) "v0"
2) "v1"
3) "v2"
4) "v3"

# ===========
# ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE zset 1 2			# 指定範圍內的所有值
1) "v1"
2) "v2"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf	# 負無窮到正無窮
1) "v0"
2) "v1"
3) "v2"
4) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf withscores # 指定區間的值,並且列印範圍內具體的值
1) "v0"
2) "0"
3) "v1"
4) "1"
5) "v2"
6) "2"
7) "v3"
8) "3"

# ===========
# ZREM key member [member ...]
127.0.0.1:6379> zadd zset 10 v1 30 v3 80 v4
(integer) 3
127.0.0.1:6379> ZREM zset v3
(integer) 1
127.0.0.1:6379> ZRANGE zset 0 -1
1) "v1"
2) "v4"
127.0.0.1:6379> ZRANGE zset 0 -1 withscores	# 列印具體的"score"
1) "v1"
2) "10"
3) "v4"
4) "80"
127.0.0.1:6379> ZCARD zset			# 檢視zset中集合的個數
(integer) 2
127.0.0.1:6379> ZREVRANGE zset 0 -1	# 以降序檢視指定區間的元素
1) "v4"
2) "v1"
# ===========
127.0.0.1:6379> ZADD zset 10 v1 20 v2 30 v3
(integer) 3
127.0.0.1:6379> ZCOUNT zset 10 30	# 獲取指定閉區間的元素的數量
(integer) 3

其餘的一些API和函式,可以通過redis官網進行檢視。

案例思路:

  • 和set相比,zset是有序,多了排序

  • top N

    • 儲存班級成績,微博熱搜,積分排名等

      將積分等加入zset,定時(比如每分鐘)重新整理zset

  • 帶權重判斷:

    • 普通事件:標誌為1
    • 重要事件:標誌為2
    • 緊急事件:標誌為3