redis的过期删除策略

redis的过期删除策略

常见删除策略

  • 定时删除: 在设置键的过期时间时创建一个定时器,定时器会在时间到来时执行对键的删除操作
  • 惰性删除: 放任过期键不管,每次从键空间中获取键时,会检查该键是否过期,过期则删除,没过期则返回
  • 定期删除: 每隔一段时间,对数据库进行检查,删除过期键

定时删除策略

通过调用定时器来完成操作,可以保证过期键会立刻删除,释放程序内存。

  • 优点:释放内存
  • 缺点:僵硬地删除,影响cpu性能

如果由大量的命令请求需求服务器去处理时,服务器还需要耗费很多的系统资源去删除过期键,很影响性能

惰性删除策略

只有在获取键时才会对键进行检查,不会再删除其他无关的过期键时耗费cpu性能

  • 优点:对cpu非常友好
  • 缺点:实际已经过期键会占用大量内存资源

定期删除策略

定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响,同时,通过定期删除过期键,也有效地减少了因为过期键而带来的内存浪费。

redis的过期删除策略

redis采用的是惰性删除策略和定期删除策略相结合的方式

惰性删除策略

过期键的惰性删除策略由expireIfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expireIfNeeded函数对输入键进行检查:

  • 如果输入键已经过期,那么将输入键从数据库中删除
  • 如果输入键未过期,那么不做任何处理

定时删除策略

过期键的定期删除策略由activeExpireCycle函数实现,每当Redis服务器的周期性操作serverCron函数执行时,activeExpireCycle函数就会被调用,它在规定的时间内,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键。

rdb对过期键的处理

生成rdb文件

在执行save或bgsave命令创建新的red文件时,程序会对缓存中的键进行检查,已过期的键不会写入新创建的rdb文件中。

载入rdb文件

启动redis时,如果服务器开启了rdb持久化,那么服务器会载入rdb文件:

  • 载入服务器是主服务器,会对rdb文件中保存的键进行检查,未过期的键会载入到数据库中,过期键则会忽略
  • 服务器是从服务器,rdb文件中保存的所有键,都会被载入到数据库中

aof对过期键的处理

写入

当服务器开启aof功能后,如果数据库中的某个键过期了,程序会向aof文件中追加一条del命令,表示该键已经被删除了。

重写

在执行aof文件重写时,程序会对数据库中的键进行检查,过期的键不会被保存到aof文件中

复制功能对过期键的处理

主从复制模式下,从服务器的过期删除模式由主服务器控制:

  • 主服务器在删除一个过期键后,会显示地向所有从服务器发送一个del命令,告知从服务器已经删除这个过期键
  • 从服务器在执行客户端发送的读命令时,即使发现该键已经过期也不会删除该键,照常返回该键的值
  • 只有从服务器接受到主服务器的del命令时,才会删除过期键
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值