gpt4 book ai didi

redis - 如果 set 中有那么多(count)元素,如何将 spop 命令与 count 一起使用

转载 作者:行者123 更新时间:2023-12-02 14:16:20 24 4
gpt4 key购买 nike

假设我想从集合中弹出 3 个元素,如何确保仅在集合中存在 3 个元素时才弹出,否则返回任何错误或其他消息

How to use "spop" command with "count" argument.

最佳答案

您想要的是调用SCARD myKey来测试成员数量,并根据结果调用SPOP

SPOPCOUNT 将返回最多 COUNT 个成员,这意味着如果您的集合只有一两个,他们将被 SPOP 并返回。

您可能希望通过一个原子操作来完成此操作。所以你必须使用 Lua Scrips :

EVAL "if redis.call('SCARD', KEYS[1]) >= tonumber(ARGV[1]) then return redis.call('SPOP', KEYS[1], ARGV[1]) else return redis.error_reply(KEYS[1]..' does NOT have at least '..ARGV[1]..' members') end" 1 myKey myNumber

让我们看一下脚本:

if redis.call('SCARD', KEYS[1]) >= tonumber(ARGV[1]) then 
return redis.call('SPOP', KEYS[1], ARGV[1])
else
return redis.error_reply(KEYS[1]..' does NOT have at least '..ARGV[1]..' members')
end

KEYS[1] 指关键参数,即您感兴趣的集合。通过参数传递键对于 Redis 集群中支持的脚本非常重要。

ARGV[1] 是一个附加参数,用于传递您所需的成员数量,在您的问题中,它是 3。

该脚本在 Redis 内以原子方式在服务器端运行,并且仅在 Redis 内部缓存时编译一次。

您可以使用 SCRIPT LOAD 加载脚本,然后将其与 EVALSHA 一起重用,以提高网络性能。

关于redis - 如果 set 中有那么多(count)元素,如何将 spop 命令与 count 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266315/

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