0.7、Redis学习-键的过期时间和过期键删除策略

本文详细介绍了Redis中键过期时间的设置方法,包括EXPIRE、TTL、PERSIST等命令的使用,以及Redis如何处理过期键的策略。同时对比了Memcache的过期策略,帮助理解不同缓存系统的设计差异。

前言

体能状态先于精神状态,习惯先于决心,聚焦先于喜好。

Redis 官方完整的命令行文档

https://redis.io/commands

本文实验 Redis 版本为3.2.100

在Redis 2.6版本及之前,有些命令是不被支持的,建议读者安装2.6之后的版本。
命令行中 key 表示 key的name,在实际使用中对应 key的名字。
[] 表示被其包括的命令可有可无。
命令行中 value 存储的值 。
对于增、减操作,key不存在于 Redis 时,默认创建一个value为 0 的 key。
append 命令,key不存在于 Redis 时,默认创建一个空串。
Redis 计数默认从左开始,以0为基数。
Redis 订阅发布 传递二进制消息,客户端默认中文显示的不是中文
时间戳转化:http://tool.chinaz.com/Tools/unixtime.aspx

Redis 键的过期时间设置

Redis 允许为键设置过期时间,这样在时间期限到达之后,该键值会被自动从Redis中删除
对于 列表、集合、散列和有序集合的键,Redis并不支持键里面的元素单独设置过期时间,这一点是需要额外注意的
为键设置过期时间,一方面可以减降低Redis的内容占用,再一个可以配合一些场景进行使用
只有字符串类型提供了过期时间的原子命令,其余集合性质的类型都需单独设置过期时间,并且,集合类的过期时间是键的整体范围,无法单独设置集合中的具体元素。

常用命令行

对于 字符串类型,在命令行中是可以直接添加过期时间设置的

EXPIRE key seconds:n秒后key过期
127.0.0.1:6379> expire name 10
(integer) 1

127.0.0.1:6379> set name 100 px 1000000
OK
127.0.0.1:6379> ttl name
(integer) 995
TTL key:查看键还有几秒过期

测试过程出现了负值,为什么?

127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 2
PERSIST key:移除键过期时间
127.0.0.1:6379> persist name
(integer) 1
PTTL key:查看键还有多少毫秒过期

Redis 2.6或以上版本支持

127.0.0.1:6379> set name 100 ex 100
OK
127.0.0.1:6379> ttl name
(integer) 96
127.0.0.1:6379> pttl name
(integer) 92368
PEXPIRE key: milliseconds:设置键在n毫秒后过期

Redis 2.6或以上版本支持

127.0.0.1:6379> pexpire name 100000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 97
Redis 过期键删除策略
先介绍三种策略
  • 定时删除:为每一个设置了有效时间的key设置一个定时器,好处是比较及时,坏处是太占用资源了
  • 懒汉式:每次访问前判断key是否已过期,已过期则删除,好处是不用额外的定时资源,坏处是,假如数据不会被再访问就会永久的占用redis内存空间
  • 定期删除:定期查询设置了过期时间的key,如果过期则删除,好处是可以避免永久占用内存,坏处是需要遍历所有的key,消耗cpu资源
Redis 使用的是两种结合的策略

Redis 采用的过期key处理策略是 懒汉式加定期删除结合的方法.

Memcache 的过期策略

memcache 的过期策略是 懒汉式+LRU(least Recently Used)
当一个键过期时不会被立即删除,而只是被标记为删除,在过期后访问改键后判断过期才会被删除
再一个,当一个新键被添加时,如果空间不够,会占用按照最近最少使用的空间,这个时候这个被占用的空间可能
保存了一个永久有效的键,也可能是一个过期的键,或者是未过期的键

参考链接

[1]、https://www.jianshu.com/p/b9ba311c71fb
[2]、https://blog.youkuaiyun.com/zhousenshan/article/details/78569234
[3]、https://blog.youkuaiyun.com/CleverCode/article/details/81742716

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值