Redis 5 已經發布了,對有序集合新增了4個命令:
- ZPOPMAX
- ZPOPMIN
- BZPOPMAX
- BZPOPMIN
下面看一下這幾個命令的作用和用法。
ZPOPMAX
命令:
ZPOPMAX key [count]
作用:
從指定集合中刪除並返回 count 個 score 值最高的元素。如果沒有指定 count,默認值爲 1。如果 count 大於 1,返回值按 score 排序,score 最大的第一個返回。
示例:
# 添加元素 redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZADD myzset 3 "three" (integer) 1 # 查看集合元素及其score redis> ZRANGE myzset 0 -1 WITHSCORES 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" # 返回2個score值最高的元素 redis> ZPOPMAX myzset 2 1) "three" 2) "3" 3) "two" 4) "2" # 查看集合剩餘元素 redis> ZRANGE myzset 0 -1 1) "one"
ZPOPMIN
命令:
ZPOPMIN key [count]
作用:
與 ZPOPMAX 一樣,只是返回 score 最小的。
BZPOPMAX
命令:
BZPOPMAX key [key ...] timeout
作用:
BZPOPMAX 是 ZPOPMAX 的阻塞版本,作用與 ZPOPMAX 相同,只是在目標集合中沒有元素時會阻塞,timeout 參數指定了過期時間(0 表示永不超時)。
示例:
在窗口1中執行:
# 添加集合元素 redis> ZADD myzset2 1 "one" 2 "two" (integer) 2 redis> ZRANGE myzset2 0 -1 WITHSCORES 1) "one" 2) "1" 3) "two" 4) "2" # 取出一個元素,集合中還剩一個元素 redis> BZPOPMAX myzset2 0 1) "myzset2" 2) "two" 3) "2" # 取出一個元素,集合空了 redis> BZPOPMAX myzset2 0 1) "myzset2" 2) "one" 3) "1" # 再取元素時,會阻塞 redis> BZPOPMAX myzset2 0 # 進入阻塞狀態
在窗口2中添加元素:
redis> ZADD myzset2 3 "tree" (integer) 1
查看窗口1:
redis> BZPOPMAX myzset2 0 1) "myzset2" 2) "tree" 3) "3"
顯示出窗口2中添加的數據,然後退出阻塞。
BZPOPMIN
命令:
BZPOPMIN key [key ...] timeout
作用:
與 BZPOPMAX 一樣,只是選擇 score 最小的元素。