得分最高的ZADD成员

时间:2018-07-20 08:37:38

标签: redis add sortedset

ZADD是否有可能(或存在另一种惯用的方式)对现有分数最高的成员加一个ZADD?

例如:

> FLUSHDB
> ZADD key 1 one
> ZADD key * mem
> ZSCORE key mem
1) "2"

1 个答案:

答案 0 :(得分:2)

您可以使用zrevrange获得最大分数,然后调用zadd将分数设置为largest + 1。没有内置的方法可以做到这一点。但是,您可以编写Lua script来完成这项工作:

local key = KEYS[1]
local field = ARGV[1]
local score = ARGV[2]

if score then
    -- client specifies a score, use it
    redis.call('zadd', key, score, field)
else
    -- get the largest score in the sorted set
    local largest = redis.call('zrevrange', key, 0, 0, 'withscores')
    score = largest[2]
    if score then
        -- update the score
        score = score + 1
    else
        -- the sorted set is empty, set a default score
        score = 0
    end
    redis.call('zadd', key, score, field)
end

尝试:./src/redis-cli --eval t.lua key , field