redis - 在 redis 中按联赛名称检索足球比赛的最佳方法是什么?

标签 redis node-redis

我的 redus 数据库中保存了数百场足球比赛。它们保存在 key 下的散列中:games:soccer:data 我有三个 z 集来将它们分类为即将到来、直播和结束。全部按日期(分数)排序。通过这种方式,我可以根据是否即将开始、已经发生或已经结束来轻松检索它们。现在,我希望能够通过联赛名称检索它们。

我想到了两种选择:

第一种选择: 保存包含游戏 ID 和联盟名称的单个哈希值。通过这种方式,我可以获得所有实时游戏 ID,然后根据各自的哈希值检查每个 ID,如果它与我想要的联赛名称相匹配,那么我将其推送到一个数组中,如果不匹配,我将跳过它。最后,返回包含我想要的联赛的所有游戏 ID 的数组。

第二种选择:为每个联赛创建 key ,并为每个联赛设置实时、即将到来和结束的设置。我认为,这样检索游戏 ID 会更快;但是,维护每一组会很痛苦。

如果您有任何其他方法可以做到这一点,请告诉我。我不知道排序是否会更快并节省一些内存。

我正在寻找速度和低内存使用率。

EDIT(以下 hobbs 替代):

      const multi = client.multi();
      const tempSet = 'users:data:14:sports:soccer:lists:temp_' + getTimestamp();

      return multi
      .sunionstore(
        tempSet,
        [
          'sports:soccer:lists:leagueNames:Bundesliga',
          'sports:soccer:lists:leagueNames:La Liga'
        ]
      )
      .zinterstore(
        'users:data:14:sports:soccer:lists:live',
        2,
        'sports:lists:live',
        tempSet
      )
      .del(tempSet)
      .execAsync()

我需要为我的查询设置 AGGREGATE MAX,但我不知道如何设置。

最佳答案

一种方法是使用包含每个联赛所有比赛的 SET,并使用 ZINTERSTORE 计算联赛集和现有集之间的交集。您可以在每次查询数据时执行 ZINTERSTORE(除非您的数据非常大,否则这不是一个非常昂贵的操作),或者您可以仅在写入其中一个“父”集时执行此操作,或者您可以将其视为通过给它一个短的 TTL 并仅在您查询它时它不存在时创建它来对缓存进行排序。

关于redis - 在 redis 中按联赛名称检索足球比赛的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785631/

相关文章:

redis - 如何使用redis-cluster配置2个节点的主从

redis - 查找存在于两个 Redis 排序集中的最大(或最小)值

javascript - 如何使 const 变量可用于其他文件

python - python-eve 的 redis 设置

redis - 使用 Redis 的速率限制?

c# - Redis全文搜索与C#

redis - redis中的订阅系统

node.js - Node Redis Emit/On 而不是 Pub/Sub

redis - 如何在redis中查询精确的整数数据

node.js - connect-redis 和 express-session 导致 req.session undefined