gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:11:45 26 4
gpt4 key购买 nike

我想在 Redis 中有一个数组(使用 Node),我可以在其中添加值并指定我希望它在其中保留多长时间。在那个时间限制之后,它们应该被删除,理想情况下能够调用一些东西,这样我就知道刚刚剩下了什么。前任。我可能会收到 120 秒的请求,所以我想将该值添加到 map 中那么长的时间,然后将其删除。

有更好的方法吗?我想过使用 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 中没有自动执行此操作的方法,但解决此类问题的常用方法是使用 Redis 排序集。在您的情况下,将 IP 设置为成员的值,并将到期时间(现在 + 生存时间)设置为使用纪元表示的分数。

无需定期循环,您只需调用 ZREMRANGEBYSCORE每隔一段时间。

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

最后,要获取尚未“过期”的 IP,请使用 ZRANGEBYSCORE 获取分数(过期时间)高于现在的成员。类似地,在使用 ZREMRANGEBYSCORE 删除之前,为您提到的回调逻辑获取过期的键。

关于javascript - Redis:添加到数组一定长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com