Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保留Redis排序集的前10个成员并删除其余成员?_Redis_Sortedset - Fatal编程技术网

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

如何保留Redis排序集的前10个成员并删除其余成员?,redis,sortedset,Redis,Sortedset,我想在Redis排序集中保留最近10次查询的结果。我使用时间戳作为分数。我需要按分数保留前10名成员,并删除其余成员。我基本上需要ZREMRANGEBYREVSCORE或ZREMRANGEBYREVRANK但这些命令不存在。有办法解决这个问题吗?redis命令会从已排序的集合中弹出最小值或指定数量的最小值。但是,只有5.0.0版才支持该命令,该版本不稳定。redis命令从排序集弹出最小值或指定数量的最小值。但是,只有5.0.0版才支持它,该版本不稳定。我找到了一个解决办法,可以使用zremran

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

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

redis命令从排序集弹出最小值或指定数量的最小值。但是,只有5.0.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)

我找到了一个解决办法,可以使用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)

我需要保留前10名成员并删除所有其他成员。ZPOPMIN删除由命令指定的成员数。我不知道在这种情况下我应该删除多少。@roser137可以用来获取排序集的基数并删除成员。可以使用
ZCARD
获取集合中元素的总数,
total number-10
ZPOPMIN
所需的
计数。我是否应该使用管道来使用此方法而不丢失数据?我需要保留前10名成员并删除所有其他成员。ZPOPMIN删除由命令指定的成员数。我不知道在这种情况下我应该删除多少。@roser137可以用来获取排序集的基数并删除成员。可以使用
ZCARD
获取集合中元素的总数,
total number-10
ZPOPMIN
所需的
计数。我应该使用管道来使用此方法而不丢失数据吗?