Redis:在不存储中间集的情况下查找SINTER结果的SCARD

时间:2015-01-14 18:00:57

标签: 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]

1 个答案:

答案 0 :(得分:4)

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

我建议您使用中间值方法,但不使用流水线操作来使用事务(MULTI / EXEC)来包装交叉,基数和删除操作。