Как сохранить первые 10 участников и удалить оставшуюся часть отсортированного набора Redis? - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу сохранить результат моих последних 10 запросов в отсортированном наборе Redis. Я использую метки времени в качестве оценки. Мне нужно сохранить 10 лучших участников по счету и удалить остальных. Мне в основном нужны ZREMRANGEBYREVSCORE или ZREMRANGEBYREVRANK, но эти команды не существуют. Есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 10 сентября 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)
0 голосов
/ 10 сентября 2018

Команда redis ZPOPMIN выводит минимальное значение или указанное количество минимальных значений из отсортированного набора. Однако он поддерживается только с версии 5.0.0, которая не является стабильной.

...