我正在处理的数据需要我在 Redis 中缓存和操作它,这会将 Unix 时间存储在一个有序列表中,我稍后需要对其进行迭代。但我找不到太多关于如何迭代 Redis 排序集的信息(在本例中是 ZRANGEBYSCORE
)。所以我想要一些关于如何完成的建议。数据中使用的分数以毫秒为单位。我写下了伪代码,但如果有人知道更好的方法,请告诉我。下面是我迄今为止在 Node.js 中的一些逻辑。
redis.ZADD(`my-sorted-set`, Date.now() + 10*60*1000, 'member1');
redis.ZADD(`my-sorted-set`, Date.now() + 20*60*1000, 'member2');
redis.ZADD(`my-sorted-set`, Date.now() + 30*60*1000, 'member3');
Here is the pseudo code on what kind of logic I want to implement...
redis.ZRANGEBYSCORE(`my-sorted-set`, 0,Date.now()+ 100*60*1000,'withscores',function(err,result){
// iterate through members.... like an array
// remove oldest member
// add newest member
});
最佳答案
如果时间戳是使用脚本生成的,那么您实际上不需要担心维护时间戳的顺序,因为它们将以升序生成,因此您可以使用列表来存储生成的时间戳.
每次生成时间戳时,使用“RPUSH”命令将其附加到 Redis 列表中,然后您可以使用“LRANGE”命令从 Redis 获取该列表。
var redis = require("redis");
var client = redis.createClient();
current_ts = Date.now();
client.rpush('DEMO_LIST', current_ts);
current_ts = Date.now();
client.rpush('DEMO_LIST', current_ts);
current_ts = Date.now();
client.rpush('DEMO_LIST', current_ts);
client.lrange("DEMO_LIST", 0, -1, function(err, redis_list) {
console.log(redis_list);
});
输出:
[ '1609513808868',
'1609513869541',
'1609566462802' ]
生成的时间戳(不断增加)被附加到列表中,并且列表中的时间戳按升序排列。
关于javascript - 如何在 JavaScript 中迭代 Redis 排序集(ZADD/ZRANGEBYSCORE)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65513786/