获取出现在多个 redis 排序集上的所有键
Get all keys that appear on multiple redis sorted sets
我在 redis 上有多个排序集,其中包含一个用户 ID 和一个分数。有什么方法可以过滤和获取出现在多个集合上的用户 ID?例如,如果列表看起来像这样
List A - u1, u2, u3, u4, u5
List B - u3, u4, u5
List C - u4, u2, u3
List D - u4, u1, u2
如果我输入列表 A、B、C、D,那么应该出现的唯一用户 ID 是 u4
如果我输入列表 A、B、C,则返回的用户 ID 为 u4、u3。
我可以在 PHP 中通过加载每个列表并过滤掉每个列表直到我得到我想要的 ID 来想象这样做,但是有什么方法可以在 Redis 中执行这个操作吗?
我也愿意接受在 Redis 中存储此结构的新方法。
在集合论中,它被称为交集。 Redis 有一个 ZINTERSTORE 命令,可以将多个排序集合的键相交,并将它们存储到一个新的键中。
ZINTERSTORE LIST-Z 4 A B C D
ZRANGE LIST-Z 0 -1 WITHSCORES
这与键 A、B、C 和 D 的用户相交,并将交集存储在键 LIST-Z 中
我在 redis 上有多个排序集,其中包含一个用户 ID 和一个分数。有什么方法可以过滤和获取出现在多个集合上的用户 ID?例如,如果列表看起来像这样
List A - u1, u2, u3, u4, u5
List B - u3, u4, u5
List C - u4, u2, u3
List D - u4, u1, u2
如果我输入列表 A、B、C、D,那么应该出现的唯一用户 ID 是 u4
如果我输入列表 A、B、C,则返回的用户 ID 为 u4、u3。
我可以在 PHP 中通过加载每个列表并过滤掉每个列表直到我得到我想要的 ID 来想象这样做,但是有什么方法可以在 Redis 中执行这个操作吗?
我也愿意接受在 Redis 中存储此结构的新方法。
在集合论中,它被称为交集。 Redis 有一个 ZINTERSTORE 命令,可以将多个排序集合的键相交,并将它们存储到一个新的键中。
ZINTERSTORE LIST-Z 4 A B C D
ZRANGE LIST-Z 0 -1 WITHSCORES
这与键 A、B、C 和 D 的用户相交,并将交集存储在键 LIST-Z 中