Я хочу сохранить результат моих последних 10 запросов в отсортированном наборе Redis. Я использую временные метки в качестве оценки. Мне нужно сохранить 10 лучших участников по количеству очков и удалить остальных. Мне в основном нужны ZREMRANGEBYREVSCORE
или ZREMRANGEBYREVRANK
, но этих команд не существует. Есть ли способ обойти это?
Как сохранить первые 10 участников и удалить остальную часть отсортированного набора Redis?
Ответы (2)
Команда Redis ZPOPMIN
выводит минимальное значение или указанное количество минимальных значений из отсортированного набора. Однако он поддерживается только с версии 5.0.0, которая не является стабильной.
person
Gunasekar
schedule
10.09.2018
Мне нужно сохранить топ-10 участников и удалить всех остальных. ZPOPMIN удаляет количество участников, указанное командой. Я не знаю, сколько я должен удалить в этом сценарии.
- person roser137; 10.09.2018
@ roser137 Можете ли вы использовать
ZCARD
, чтобы получить мощность отсортированного набора и удалить элементы.
- person Gunasekar; 11.09.2018
Вы можете использовать
ZCARD
, чтобы получить общее количество элементов в наборе, а total number - 10
— это COUNT
, которые вам нужны для ZPOPMIN
.
- person for_stack; 11.09.2018
Это включает в себя два шага. Должен ли я использовать конвейеры, чтобы использовать этот метод без потери данных?
- person roser137; 12.09.2018
Я нахожу обходной путь с использованием отрицательных оценок с помощью zremrangebyrank. Я не уверен, что это правильный путь, но работает для меня.
counter = 0;
// temp data
setInterval(async () => {
counter += 1;
val = (new Date()).toString() + " " + counter;
score = -1 * (new Date() / 1000);
res = await client.zaddAsync("myset", score, val)
}, 1000)
// remove other than top50
setInterval(async () => {
res = await client.zremrangebyrankAsync("myset", 50, -1);
console.log("myset zremrangebyrank" + " " + res + " " + val);
}, 5000)
// log
setInterval(async () => {
res = await client.zrangeAsync("myset", 0, 5);
console.log(res);
res = await client.zcardAsync("myset");
console.log("myset zcard" + " " + res);
}, 2000)
person
roser137
schedule
10.09.2018