将项目保留在列表中一段时间

时间:2016-06-07 18:29:07

标签: redis

我根本不是redis的专家。今天我遇到了一个想法,但我不知道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.*

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的数量太大,那么排序的集合将迅速增长。您的调度程序线程必须正常工作以保持内存的控制。