Redis:添加到一定的长度数组?

我想在Redis中使用一个数组(使用Node),我可以在其中添加值并指定我希望它留在那里的时间。 在这个时间限制之后,他们应该被删除,并且理想地能够打电话给我,所以我知道刚刚离开的东西。 恩。 我可能会收到120秒的请求,所以我想把这个值添加到地图上,然后把它删除。

有一个更好的方法吗? 我想过使用EXPIRE,但似乎只是为了键,而不是数组中的元素?

任何想法都会很棒。

这就是我所做的:

app.get('/session/:length', function(req, res) { var length = parseInt(req.param('length'), 10); addToArray(length, ip) var ip = req.connection.remoteAddress; res.json({ip: ip, length: length}); 

});

基本上,当我将它添加到数组中时,我希望它只在传入的时间内保持它在数组中。所以如果你说30秒,它在该数组中30秒,然后消失,并调用回电话。 也许有更好的方法来解决这个问题?

我现在所做的是保持时间添加和ip,时间在一个数组中,并周期性地通过数组检查和删除循环,但也许可以在redis中自动执行此操作。

虽然在Redis中没有自动的方法,但这种问题的常见方法是使用Redissorting集。 在你的情况下,设置IP作为成员的价值和到期时间(现在+生存时间)作为分数使用时代表示。

而不是定期循环,你可以每隔一段时间调用一次ZREMRANGEBYSCORE 。

由于集合成员是唯一的,但是,这意味着您将只能保存每个IP一次。 如果没有问题,只需更新每个IP的分数,否则通过连接IP和时间戳使成员值唯一。

最后,为了获得没有“过期”的IP,使用ZRANGEBYSCORE获得比现在更高(到期时间)的成员。 同样,在使用ZREMRANGEBYSCORE删除之前,请获取您提到的callback逻辑过期的密钥。