gpt4 book ai didi

redis - 将项目保留在列表中一定时间

转载 作者:可可西里 更新时间:2023-11-01 11:34:12 24 4
gpt4 key购买 nike

我根本不是 Redis 专家。今天突然想到一个idea,不知道redis能不能实现。

我想存储值列表但只存储一段时间,例如在过去 5 分钟内访问页面的 IP 地址列表。据我所知,我不能在单个列表/哈希项上设置 EXPIRE,对吗?所以我将 123 插入列表/哈希,但在一定的固定时间后我希望每个项目都过期/消失?或者也许代替列表哈希结构会更合适 { '1': timestamp-when-disapear, ... }?

或者也许唯一的解决方案是

SET test.1.1 1
EXPIRE test.1.1 60
SET test.1.2 2
EXPIRE test.1.2 60
SET test.1.3 3
EXPIRE test.1.3 60
# to retrieve, can I pipeline KEYS output to MGET?
KEYS test.1.*

最佳答案

改用排序集。

在排序集中记录服务器 IP 和时间戳。在检索期间使用该时间戳来获取您需要的东西。在调度程序中定期删除超出范围的键。

例子:

zadd test 1465371055 1.1
zadd test 1465381055 1.3
zadd test 1465391055 1.1

您的排序集将包含 1.1 和 1.3,其中 1.1 的新值是 1465391055。

现在用于检索

zrangebyscore test min max 
min -> currenttime - (5*60*1000)
max -> currenttime

您将在过去 5 分钟内访问 IP。

在另一种调度程序线程中,您需要删除不需要的条目。

zremrangebyscore test min max
min -> currenttime - (10*60*1000) -> you can give it to any minute you want.
max -> currenttime

同时了解如果不同 IP 的数量太大,则排序集将快速增长。您的调度程序线程必须正常工作才能控制内存。

关于redis - 将项目保留在列表中一定时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686712/

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