gpt4 book ai didi

redis - 从 Redis 中的有序集合的范围创建新集合

转载 作者:可可西里 更新时间:2023-11-01 11:15:31 25 4
gpt4 key购买 nike

我有许多排序集用作我系统上的二级索引,用户查询可能会命中其中一些。

ZADD scoreSet 1 "fred"
ZADD scoreSet 5 "bob"
ZADD scoreSet 2 "spodrick"

ZADD ageSet 25 "fred"
ZADD ageSet 29 "bob"
ZADD ageSet 38 "spodrick"

要使用这些索引来获取所有 30 岁以下且分数 >2 的用户

ZRANGEBYSCORE scoreSet (2 +inf
(store these in my application code)
ZRANGEBYSCORE ageSet -inf (30
(store these in my application code)
(Perform Set intersection in my application code)

但这意味着我已将所有数据从 redis 复制到我的应用程序服务器以执行交集,是否有更有效的方法来执行此操作,我不通过网络传输所有匹配范围,而是在重新发布?

我想要的是

ZRANGEBYSCORESTORE tempSet1 scoreSet (2 +inf
ZRANGEBYSCORESTORE tempSet2 ageSet -inf (30
SINTER tempSet1 tempSet2

其中 ZRANGEBYSCORESTORE 执行 ZRANGEBYSCORE 操作并将结果存储在新集合中而不是返回它们。这样,Redis 就完成了所有繁重的工作,并且只向我发送我感兴趣的实际交叉点。

我怎么能这样做,因为我可以做 ZINTERSTORE 和 ZUNIONSTORE 没有 RANGESTORE 似乎我错过了什么。

最佳答案

这是一个有很多可能答案的问题。这是我的前两个:

  1. 利用 Lua 的强大功能避免将数据移动到客户端,并在服务器端完成所有工作。您可以通过这种方式解决缺少 RANGESTORE 的问题。

  2. 使用位交错维护一个排序集,其中分数由两个属性组成。在 Redis-verse 中,antirez 进行了一项名为 redimension 的实验,它正是这样做的。链接是https://www.reddit.com/r/redis/comments/3qjlkk/redimension_ruby_library_implementing/我将上面的端口移植到 Redis lua https://www.reddit.com/r/redis/comments/3s0h73/luaredimension_redis_multidimensional_query/ .您可以在 Multi dimensional indexes 阅读有关该方法的更多信息.

关于redis - 从 Redis 中的有序集合的范围创建新集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49755663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com