我需要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]
答案 0 :(得分:4)
Redis不会执行嵌套命令,因此概念版本虽然有助于描述需求,但并不支持。
我建议您使用中间值方法,但不使用流水线操作来使用事务(MULTI / EXEC)来包装交叉,基数和删除操作。