Redis 如果集合中有那么多(count)元素,如何将spop命令与count一起使用
假设我想从集合中弹出3个元素,我如何确保只有在集合中出现3个元素时才会弹出,否则将返回任何错误或其他消息 如何使用带有count参数的spop命令 您需要调用SCARD myKey来测试成员的数量,并根据结果调用SPOP 带有COUNT的SPOP将返回多达COUNT个成员,这意味着如果您的集合只有一个或两个成员,那么它们将被SPOP并返回 你可能想用一个原子操作来实现这一点。因此,您必须使用: 让我们看一下脚本:Redis 如果集合中有那么多(count)元素,如何将spop命令与count一起使用,redis,Redis,假设我想从集合中弹出3个元素,我如何确保只有在集合中出现3个元素时才会弹出,否则将返回任何错误或其他消息 如何使用带有count参数的spop命令 您需要调用SCARD myKey来测试成员的数量,并根据结果调用SPOP 带有COUNT的SPOP将返回多达COUNT个成员,这意味着如果您的集合只有一个或两个成员,那么它们将被SPOP并返回 你可能想用一个原子操作来实现这一点。因此,您必须使用: 让我们看一下脚本: if redis.call('SCARD', KEYS[1]) >= ton
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内部缓存时只编译一次
您可以使用脚本加载来加载脚本,然后将其与EVALSHA一起重用,以提高网络性能。您需要的是调用SCARD myKey来测试成员数,并根据结果调用SPOP
带有COUNT的SPOP将返回多达COUNT个成员,这意味着如果您的集合只有一个或两个成员,那么它们将被SPOP并返回
你可能想用一个原子操作来实现这一点。因此,您必须使用:
让我们看一下脚本:
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内部缓存时只编译一次
您可以使用脚本加载来加载脚本,然后将其与EVALSHA一起重用,以提高网络性能。回答得不错。。。虽然在这种情况下,我只需要记忆+删除集合;SMEMBERS处于启用状态,如果集合可能变大,则存在性能风险。此外,当您删除时,很可能会有新成员。所以你可能想一个接一个的重新注册。我可以用JavaScriptNodeJS来做吗?当然,看看这个漂亮的答案。。。虽然在这种情况下,我只需要记忆+删除集合;SMEMBERS处于启用状态,如果集合可能变大,则存在性能风险。此外,当您删除时,很可能会有新成员。所以你可能想一个接一个的重新注册。我可以在JavaScript节点中这样做吗?当然,看看