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