从零学习redis(8)--- 过期及过期策略

redis 刘宇帅 5年前 阅读量: 1855

redis 的 string 类型是支持过期设置的,默认是永不过期的。

Redis 设置过期

redis 中设置设置 key 过期有3中方式 第一种在设置值的时候指定过期时间 Set 命令格式

SET key value [EX seconds] [PX milliseconds] [NX|XX]
  1. EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
  2. PX millisecond :设置键的过期时间为 millisecond 毫秒。 3. SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
  3. NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。
  4. 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 的过期策略

  1. redis 采用懒汉删除+定时删除
  2. redis 定时删除依次遍历各个库,当达到删除时长时会记录当前删除到库,下次定时删除时从该库开始遍历。

ps:memcache采用懒汉删除策略

提示

功能待开通!


暂无评论~