Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Lua 在redis中检查多个键_Lua_Redis - Fatal编程技术网

Lua 在redis中检查多个键

Lua 在redis中检查多个键,lua,redis,Lua,Redis,下面是我在redis中设置的关键点的示例: SADD group:test subgroup:1 SADD subgroup:1 user:1 SADD subgroup:1 user:2 SADD group:test subgroup:2 SADD subgroup:2 user:3 所以我想实现的是,我想找出哪个子组在keygroup:test中有空格,然后返回它。例如,假设每个子组的最大用户数为2 在这种情况下,子组2将有空间,因此它应该返回subgroup:2 如果没有任何空格,我希

下面是我在redis中设置的关键点的示例:

SADD group:test subgroup:1
SADD subgroup:1 user:1
SADD subgroup:1 user:2
SADD group:test subgroup:2
SADD subgroup:2 user:3
所以我想实现的是,我想找出哪个子组在key
group:test
中有空格,然后返回它。例如,假设每个子组的最大用户数为2

在这种情况下,子组2将有空间,因此它应该返回
subgroup:2

如果没有任何空格,我希望它返回最后一个子组+1。因此,在这种情况下,它将返回
subgroup:3

目前,这种编写方式意味着我必须使用
smembers
获取
组的成员:测试
设置并使用
scard
循环每个键,以查看哪个子组有空间。如果循环结束,并且任何键中都没有空格,那么我只需在最后一个子组中添加1并使用它

用户可以在加入子组后离开。我使用multi来实现这一点,但它似乎不是很有效,因为即使在钥匙中找到空间后,它仍会继续运行scard。因此,让我们假设在这个示例中,user:2
left
subgroup:1
,它仍然会检查
subgroup:2
以查看它是否有空间

如果有办法的话,我非常愿意重组数据。我唯一不想更改的是,用户的密钥需要存储在子组集中

如果有一种方法可以用LUA脚本实现这一点,我也愿意这么做

我真的在寻找一种有效的方法来做到这一点


有人能帮上忙吗?

Lua脚本不是这里的方式-重写上述要求:我们正在寻找一种有效的方法来随时获取集合的基数(例如
子组:1
),我们特别感兴趣的是集合中成员最少的那个(“有空间”)

要做到这一点,您需要在数据库中保留另一个键—我们称之为
计数。该键保存一个排序集数据结构,其中每个元素是一个集合的名称,分数是当前的基数

“当前”是指代码对子组执行的每个
SADD
SREM
DEL
,都需要与
计数
键上的相关
ZADD
耦合

当所有这些都准备就绪后,只需查询得分最低的成员的密钥:

ZRANGE counts 0 0

维护这个额外结构的成本是每当子组发生变化时更新的复杂性。排序集的操作通常是O(log(N)),因此它们非常有效,不会给服务器带来太多负担。

这里不是Lua脚本的方式-改写上述要求:我们正在寻找一种有效的方式,随时获取集的基数(例如
子组:1
),我们特别感兴趣的是设置成员最少的一个(“有空间”)

要做到这一点,您需要在数据库中保留另一个键—我们称之为
计数。该键保存一个排序集数据结构,其中每个元素是一个集合的名称,分数是当前的基数

“当前”是指代码对子组执行的每个
SADD
SREM
DEL
,都需要与
计数
键上的相关
ZADD
耦合

当所有这些都准备就绪后,只需查询得分最低的成员的密钥:

ZRANGE counts 0 0

维护这个额外结构的成本是每当子组发生变化时更新的复杂性。排序集的操作通常是O(log(N)),因此它们非常有效,不会给服务器带来太多负担。

对不起,我在解释这个问题时犯了一个错误。我确实使用SCARD来查看哪个子组有空间。我编辑它是为了让它更清楚。对不起,我在解释这个问题时犯了一个错误。我确实使用SCARD来查看哪个子组有空间。我对它进行了编辑,使它更清晰。