В Redis, что у меня есть упорядоченный набор идентификаторов (которые, забитый отметкой времени):Как вы присоединяетесь к упорядоченному набору с хэшами в Redis?
(name of ordered set) someobject:media
Member | Score
1 1442784376400
2 1442784376420
3 1442784376450
Каждый член является идентификатор хэша (как это):
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 предоставляет, но может быть, я неправильно. Вышеуказанный метод выглядит совершенно неэффективным.
Другими словами, я хочу присоединиться ко всем media:<id>
от заказанного набора someobject:media
. Это возможно?
Спасибо, это выглядит поближе. Интересно, есть ли способ использовать SCAN в этом типе операции? Например, если я хочу получить все хэши «media: *». –
Я думаю, вы могли бы использовать zscan, если бы вы хотели обработать множество членов в итеративном курсовом стиле, получая небольшое количество данных каждый раз, а не получая большой объем данных в каждом вызове. –
На самом деле, 'MULTI' на самом деле не то, что вам нужно здесь, а скорее конвейерная обработка, но я считаю, что конечный результат будет таким же в этом случае. –