在Redis中,假设我有一个按时间戳评分的ID有序集合:
我的直觉告诉我Redis提供了某种原子"join"类型操作,但也许我是错的。上述方法看起来完全低效。
换句话说,我想要加入所有
(name of ordered set) someobject:media
Member | Score
1 1442784376400
2 1442784376420
3 1442784376450
每个成员都是哈希的ID(像这样):
media:1 { 'name': 'something', 'timestamp': '1442784376400 }
media:2 { 'name': 'somethingelse', 'timestamp': '1442784376420' }
// and so forth
是否有一种原子操作可以让我获取someobject:media
成员的所有哈希值?
我正在使用Node Redis,理论上它提供了redis-cli提供的所有操作(正如人们所期望的那样)。
到目前为止,我唯一的想法是像这样循环遍历每一个元素:
client.zrevrange(['someobject:media', 0, -1], (err, res) => {
let promises = res.map(mediaId => {
return new Promise((resolve, reject) => {
client.hgetall('media:' + mediaId, (err, res) => {
resolve(res);
});
});
});
Promise.all(promises).then(result => {
// do something with the "media" hashes
});
});
我的直觉告诉我Redis提供了某种原子"join"类型操作,但也许我是错的。上述方法看起来完全低效。
换句话说,我想要加入所有
someobject:media
有序集合中的media:<id>
。这可行吗?
SCAN
呢?比如我想获取所有media:*
的哈希值。 - Josh BeamMULTI
,而是流水线处理,但我相信在这种情况下最终结果应该是一样的。 - Itamar HaberSORT
解决方案几乎可以,但我无法找到一种方法来获取它返回的排序集合中项目的实际score
,只能得到成员键。使用这个解决方案,我们可以从zrange
调用中获取分数,并手动将其解析为哈希项。 - Brandon