Redis:在不存储中间集的情况下查找 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]

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

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

相关内容

最新更新