如何保留前10名成员并删除Redis排序集中的其余成员?

时间:2018-09-10 14:43:59

标签: redis sortedset

我想将最近10个查询的结果保留在Redis排序集中。我使用时间戳作为分数。我需要按分数保留前10名成员,并删除其余成员。我基本上需要ZREMRANGEBYREVSCOREZREMRANGEBYREVRANK,但是这些命令不存在。有办法解决吗?

2 个答案:

答案 0 :(得分:1)

redis命令ZPOPMIN从排序集中弹出最小值或指定数量的最小值。但是,只有不稳定的5.0.0版本才支持它。

答案 1 :(得分:0)

我找到了对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)