python - Redis:查找 SINTER 结果的 SCARD,而不存储中间集

标签 python lua redis redis-py

我需要redis中2个大集合的交集的长度(SCARD)。

所以这实现了我想要的:

> SINTERSTORE intermediate s:1 s:2
> SCARD intermediate

但是集合很大,所以我不想存储中间值。从概念上讲,我想要:

> SCARD (SINTER s:1 s:2)

有没有办法在单个命令中实现这一点,也许使用 Lua 脚本?或者我最好的选择是用我的应用程序语言编写脚本并在完成后删除中间值?例如使用 python 和 redis-py:

>>> r = redis.Redis(...)
>>> pipe = r.pipeline()
>>> res = pipe.sinterstore('intermediate', 's:1', 's:2').scard('intermediate').delete('intermediate').execute()
>>> print res[1]

最佳答案

Redis 不执行嵌套命令,因此概念版本虽然有助于描述需求,但不受支持。

我建议您使用中间值方法,但不要使用管道,而是使用事务 (MULTI/EXEC) 来包装相交、基数和删除操作。

关于python - Redis:查找 SINTER 结果的 SCARD,而不存储中间集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949478/

相关文章:

database - Redis:数据库大小与内存的比率?

python - 计算文本字段交互之间的时间

python - 确定 unittest.mock.patch 的目标

c++ - 在 Lua 表中注册 C 函数

variables - 在 Lua 中读取动态变量名

postgresql 对外部表 pg_redis_fdw 的权限被拒绝

使用 --pipe 批量导入 redis

python - 如何写入 Python 子进程的标准输入?

python - 用于创建包含许多重复 bool 值的列表的快捷方式

json - Lua - 如何传递一个API调用获得的字符串来调用另一个API调用