gpt4 book ai didi

redis - 获取排序集中成员的左侧和右侧

转载 作者:可可西里 更新时间:2023-11-01 11:13:24 26 4
gpt4 key购买 nike

我需要能够获取排序集中给定成员左侧和右侧的成员。

例如:

["red", "green", "blue", "yellow", "black"]

如果我要求“蓝色”左侧和右侧的成员,我需要返回“绿色”和“黄色”。

我可以这样做的一种方法是使用 zrank 获取蓝色 (2) 的成员(我们称它为 x)的索引,然后使用 zrange 和x-1 的 start 和 x+1 的 stop

问题:它不是原子的。如果在两个步骤(zrank 和 zrange)之间删除了索引 <= x 的成员,则索引将不匹配并且将返回错误的成员。

有原子的方式来做到这一点吗?

最佳答案

使用 LUA 脚本。像这样的东西:

local rank = redis.call('zrank', KEYS[1], ARGV[1]);
if rank == nil then
return nil
end

if rank == 0 then
return redis.call('zrange', KEYS[1], rank, rank + 1);
end

return redis.call('zrange', KEYS[1], rank - 1, rank + 1);

第一个参数是您的排序集键,第二个参数是排序集中的成员。

关于redis - 获取排序集中成员的左侧和右侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33301262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com