ZADD 得分最高的成员
ZADD member with highest score
是否有可能(或者是否有另一种惯用的方式)ZADD 一个分数为现有最高分数加一的成员?
例如:
> FLUSHDB
> ZADD key 1 one
> ZADD key * mem
> ZSCORE key mem
1) "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
是否有可能(或者是否有另一种惯用的方式)ZADD 一个分数为现有最高分数加一的成员?
例如:
> FLUSHDB
> ZADD key 1 one
> ZADD key * mem
> ZSCORE key mem
1) "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