javascript - 如何在 JavaScript 中迭代 Redis 排序集(ZADD/ZRANGEBYSCORE)?

标签 javascript node.js loops redis

我正在处理的数据需要我在 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/

相关文章:

javascript - 如何让 GTM 标签等待加载一些 jQuery?

javascript - Symbol.Iterator - 传递参数

c - 我在结束 C 中的循环时遇到问题

loops - 如何编写传递给函数的迭代器类型?

javascript - AngularJS 中的字符串比较

c# - 更新 Google Analytics JavaScript 代码

javascript - Chrome 扩展程序在使用内容脚本加载每个页面之前运行 JS

node.js - 让gulp.js打开非默认浏览器

node.js - Node js 图像处理没有文件系统?

angular - 如何在循环中使用类的属性?