【发布时间】:2016-04-23 00:26:33
【问题描述】:
我的 redus 数据库中保存了数百场足球比赛。它们保存在密钥下的哈希中:games:soccer:data 我有三个 z 集来将它们分类为即将到来的、活动的和结束的。所有按日期(分数)排序。通过这种方式,我可以轻松地检索它们,具体取决于它们是否即将开始、它们已经在发生或它们已经结束。现在,我希望能够通过联赛名称检索它们。
我想出了两个选择:
第一种选择:保存包含游戏 ID 和联赛名称的单个哈希值。通过这种方式,我可以获得所有实时游戏 id,然后根据各自的哈希值检查每个 id,如果它与我想要的联赛名称匹配,那么我将它推入一个数组,如果不是,我跳过它。最后,返回包含我想要的联赛的所有游戏 ID 的数组。
第二种选择:为每个联赛创建密钥,并为每个联赛创建实时、即将到来和结束的集合。我认为这样检索游戏ID会更快;但是,维护每个集合会很痛苦。
如果您有其他方法,请告诉我。我不知道排序是否会更快并节省一些内存。
我正在寻找速度和低内存使用率。
编辑(遵循霍布斯替代方案):
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 设置为我的查询,但我不知道该怎么做。
【问题讨论】:
标签: redis node-redis