Login
网站首页 > 文章中心 > 其它

如何为Redis中list中的项设置过期时间

作者:小编 更新时间:2023-08-10 13:04:34 浏览量:379人看过

Redis是一个伟大的工具,用来在内存中存储列表是很合适的.

不过,如果你想要快速搜索列表,同时需要让列表中每项都在一定时间后过期,应该怎么做呢?

首先,当然不能使用不同的类似的key存储数据,然后使用keys命令来获取所有类似key的数据.这样的开销是不可接受的.

如何为Redis中list中的项设置过期时间-图1

Redis并没有直接提供方法做这件事,但是这是可以做到的!虽然最后用的未必是Redis的List数据结构.

问题:

我想在cmdb数据采集中,为API 这里加上一个认证的功能,毕竟不能谁都可以随便提交数据给我, 我就接收的所以还是需要一个认证的.

参考了 tornado 中的一个验证方式.

然后我在网上找到这篇文章,它描述了两种办法.

Redis的集合:"无序的字符串集合",它的项有下面的特点

唯一的(如果加入重复的数据,redis会默默的拒绝)

无序,并且不可以用任何方法(在redis中)排序

如何为Redis中list中的项设置过期时间-图2

Redis有序集合:"有序的字符串集合",它的项有下面的特点:

和集合一样,每个项都是唯一的

拥有积分(项的积分并不必须是唯一的)

根据积分排序(有索引)

两种解决方法:

① 有序集合

查询有序集合是非常快的,因为redis将一个列表转换成了集合,所以当我们访问它的时候,它已经是排好序的了.

根据Redis文档的描述:

如何为Redis中list中的项设置过期时间-图3


当然,你不可以对有序集合中每个项设置过期时间.

你可以通过score对有序集合进行查询,我们可以利用这个地方来形成一个解决方案: (其中scroe指的就是该有序集合成员的次序.默认从小到大.)

对于加入到有序集合的每个项,我们都将它的score设置为 Unix Timestamp,这个timestamp代表它的过期时间.然后,我们加入一个定时任务,定时移除那些过期的数据.

这个方案使用普通的集合.

因为不能对集合中每项都设置TTL,但是可以对整个集合设置TTL.所以,我们可以将每个时间段的数据放在一个集合中.然后对这个集合设置过期时间.

Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用.单位以秒计.

语法

redis Expire 命令基本语法如下:

redis 12⑦0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS

可用版本

>= 1.0.0

返回值

实例

首先创建一个 key 并赋值:

redis 12⑦0.0.1:6379> SET runooobkey redis
OK

为 key 设置过期时间:

redis 12⑦0.0.1:6379> EXPIRE runooobkey 60
(integer) 1

以上实例中我们为键 runooobkey 设置了过期时间为 1 分钟,1分钟后该键会自动删除.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章