在不存储中间集合的情况下,查找SINTER结果的SCARD。

我需要找出 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]
点赞
用户3160475
用户3160475

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

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

2015-01-14 18:19:14