过期操作



redis 指定 redis 指定时间过去_键值


expire key seconds:设置 key 在 n 秒后过期;
示例:expire key 100
pexpire key milliseconds:设置 key 在 n 毫秒后过期;
示例:pexpire key2 100000
expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期;
示例:expireat key3 1573472683
pexpireat key millisecondsTimestamp:设置 key 在某个时间戳(精确到毫秒)之后过期;
示例:pexpireat key4 1573472683000
小贴士:在 Redis 可以使用 time 命令查询当前时间的时间戳(精确到秒)
 
set key value ex seconds:设置键值对的同时指定过期时间(精确到秒);
示例:set k v ex 100
set key value px milliseconds:设置键值对的同时指定过期时间(精确到毫秒);
示例:set k2 v2 px 100000
setex key seconds valule:设置键值对的同时指定过期时间(精确到秒)。
示例:setex k3 100 v3
persist key

持久化过期的键:

  1. RDB

Rdb分为生成阶段和加载阶段。

生成阶段不会将过期的键写入到文件中。

加载阶段也不会加载过期的键。

  1. AOF

AOF持久化的时候,如果redis中有过期的键没有被删除,那么aof文件会保存该键,等到这个过期的键被删除的时候,再在aof文件追加一条del命令。

AOF重写会对aof文件进行检查,不会保存过期之后的键。

主从同步过期的键:

从库不会检查过期的键,只有等待主库过期删除同意一条删除的命令,才会删除过期的键。

过期策略

Redis 之所以能知道那些键值过期,是因为在 Redis 中维护了一个字典,存储了所有设置了过期时间的键值,我们称之为过期字典。


redis 指定 redis 指定时间过去_Powered by 金山文档_02


  1. 定时删除

在设置键值过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行键的删除操作。优点是可以保证内存被尽快的释放,缺点是当出现大批量同时过期的键时,会影响redis的使用。

  1. 惰性删除

不主动删除过期键,每次从数据库获取键值时判断是否过期,如果过期则删除键值,并返回 null。优点是使用很少的资源去判断过期的键,缺点是会有一定的空间浪费


redis 指定 redis 指定时间过去_redis 指定_03


  1. 定期删除

Redis 默认每秒进行 10 次过期扫描,此配置可通过 Redis 的配置文件 redis.conf 进行配置,配置键为 hz 它的默认值是 hz 10。(Redis 每次扫描并不是遍历过期字典中的所有键,而是采用随机抽取判断并删除过期键的形式执行的。)


redis 指定 redis 指定时间过去_redis_04


为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。