Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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
如何在JavaScript中迭代Redis排序集(ZADD/ZRANGEBYSCORE)?_Javascript_Node.js_Loops_Redis - Fatal编程技术网

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

如何在JavaScript中迭代Redis排序集(ZADD/ZRANGEBYSCORE)?,javascript,node.js,loops,redis,Javascript,Node.js,Loops,Redis,我正在处理的数据需要我在Redis中缓存和操作它,它将Unix时间存储在一个有序列表中,我需要在以后迭代。但是我找不到那么多关于如何迭代Redis排序集的信息(在本例中为ZRANGEBYSCORE)。所以我想要一些关于如何做的建议。数据中使用的分数以毫秒为单位。我写下了伪代码,但是如果有人知道更好的方法,请告诉我。下面是我到目前为止在Node.js中使用的一些逻辑 redis.ZADD(`my-sorted-set`, Date.now() + 10*60*1000, 'member1'); r

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

生成的时间戳(不断增加)被追加到列表中,并且列表中的时间戳按升序排列。

您是否已经有了需要按顺序排列的时间戳列表,或者在事件发生时将时间戳插入redis中?如果时间戳是基于事件的,您可以使用一个简单的列表,因为事件时间无论如何都是以升序排列的。通过使用Date.now()将它们直接添加到Redis中,谢谢您的建议。问题是,我使用redis.set和redis.get逻辑从redis缓存中的现有数据获取数据,其逻辑如下:Cache.get(
my sorted set
,(err,value)=>{if(err)return err;if(!value){Cache.set(
my sorted set
,Date.now()+60*60*1000);Cache.PEXPIREAT(
my sorted set
,Date.now()+60*60*1000);}});您可以在使用“RPUSH”生成的列表中迭代吗?如果可以,如何迭代?