如何保留前 10 个成员并删除 Redis 排序集的其余部分?
How do I keep first 10 members and delete rest of a Redis sorted set?
我想在 Redis 排序集中保留我最近 10 次查询的结果。我使用时间戳作为分数。我需要按分数保留前 10 名成员并删除其余成员。我基本上需要 ZREMRANGEBYREVSCORE
或 ZREMRANGEBYREVRANK
但这些命令不存在。有解决办法吗?
redis命令ZPOPMIN
从排序集合中弹出最小值或指定个数的最小值。但是,它仅从不稳定的版本 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)
我想在 Redis 排序集中保留我最近 10 次查询的结果。我使用时间戳作为分数。我需要按分数保留前 10 名成员并删除其余成员。我基本上需要 ZREMRANGEBYREVSCORE
或 ZREMRANGEBYREVRANK
但这些命令不存在。有解决办法吗?
redis命令ZPOPMIN
从排序集合中弹出最小值或指定个数的最小值。但是,它仅从不稳定的版本 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)