我根本不是redis的专家。今天我遇到了一个想法,但我不知道redis是否有可能。
我想存储值列表但仅存在一段时间,例如最近5分钟访问过页面的IP地址列表。据我所知,我无法在单个列表/哈希项上设置EXPIRE
,对吧?所以我正在将1
,2
,3
推送到列表/哈希中,但是经过一段时间后,我希望每个项目都过期/消失?或者也许代替列表哈希结构会更合适{ '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.*
答案 0 :(得分:0)
请改用排序集。
将服务器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的数量太大,那么排序的集合将迅速增长。您的调度程序线程必须正常工作以保持内存的控制。