从零学习redis(8)--- 过期及过期策略
redis 刘宇帅 6年前 阅读量: 2324
redis 的 string 类型是支持过期设置的,默认是永不过期的。
Redis 设置过期
redis 中设置设置 key 过期有3中方式 第一种在设置值的时候指定过期时间 Set 命令格式
SET key value [EX seconds] [PX milliseconds] [NX|XX]
- EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
- PX millisecond :设置键的过期时间为 millisecond 毫秒。 3. SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
- NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
- XX :只在键已经存在时,才对键进行设置操作。
示例
127.0.0.1:6379> SET hello world EX 5 // 设置 key test 过期时间是 5 秒
OK
第二种使用命令 SETEX PSETEX,两个命令分别等价于上面的 EX 和 PX 参数。
第三种使用 expire 设置已经存在的 key 的过期时间。
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> expire hello 5
(integer) 1
127.0.0.1:6379> get hello
(nil)
我们也可以使用命令persist取消过期设置
127.0.0.1:6379> set hello world ex 10
OK
127.0.0.1:6379> persist hello
(integer) 1
127.0.0.1:6379> get hello
"world"
常见的过期策略
定时删除
含义:在设置 key 过期的同时,为该 key 创建一个定时器,让定时器在 key 过期的时候去删除 key。
优点:内存尽快释放
缺点:若过期 key 比较多,需要设置很多定时器且 CPU 也需要更多的处理时间,会影响性能
懒汉式删除
含义:只有当操作特定 key 的时候,才去检查 key 是否过期,若过期就删除。
优点:只有到操作 key 的时候才去删除,减少 CPU 使用。
缺点:如果过期 key 比较多,会占用较多的内存。
定期删除
含义:每隔一段时间扫描 key,并删除需要删除的 key。
优点:通过不同的时间间隔可以减少 CPU 处理时间,同时减轻懒汉式存在的内存占用问题。
缺点:CPU 占用差于懒汉删除,内存占用差于定是删除。
redis 的过期策略
- redis 采用懒汉删除+定时删除
- redis 定时删除依次遍历各个库,当达到删除时长时会记录当前删除到库,下次定时删除时从该库开始遍历。
ps:memcache采用懒汉删除策略