Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 如果集合中有那么多(count)元素,如何将spop命令与count一起使用_Redis - Fatal编程技术网

Redis 如果集合中有那么多(count)元素,如何将spop命令与count一起使用

Redis 如果集合中有那么多(count)元素,如何将spop命令与count一起使用,redis,Redis,假设我想从集合中弹出3个元素,我如何确保只有在集合中出现3个元素时才会弹出,否则将返回任何错误或其他消息 如何使用带有count参数的spop命令 您需要调用SCARD myKey来测试成员的数量,并根据结果调用SPOP 带有COUNT的SPOP将返回多达COUNT个成员,这意味着如果您的集合只有一个或两个成员,那么它们将被SPOP并返回 你可能想用一个原子操作来实现这一点。因此,您必须使用: 让我们看一下脚本: if redis.call('SCARD', KEYS[1]) >= ton

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

如何使用带有count参数的spop命令

您需要调用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一起重用,以提高网络性能。

您需要的是调用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节点中这样做吗?当然,看看