我的 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/