Redis内存回收

文章目录


Redis之所以性能强,最主要的原因是基于内存存储,然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。

一、过期策略

可以通过expire命令给Redis的key设置TTL(存活时间):

 当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放,从而起到内存回收的目的

1.Redis是如何知道一个key是否过期?

Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在Dict结构中。不过其database结构体中,有两个Dict:一个用来记录key-value;另一个用来记录key-TTL。

利用两个Dict分别记录key-value对及key-ttl对

2.是不是TTL到期就立即删除了呢?

惰性删除:顾名思义并不是在TTL到期后立刻删除,而是在访问一个key的时候,检查该key的存活时间,如果已经过期才执行删除

 

周期删除:顾名思义是通过一个定时任务,周期性的抽样部分过期的key,然后执行删除。执行周期有两种:

  • Redis会设置一个定时任务serverCron(),按照server.hz的频率来执行过期key清理,模式为SLOW
  • Redis的每个事件循环前会调用beforeSleep()函数,执行过期key清理,模式为FAST

 3.小结

RedisKey的TTL记录方式:

  • 在RedisDB中通过一个Dict记录每个key的TTL时间

过期key的删除策略

  • 惰性清理:每次查找key时判断是否过期,如果过期则删除
  • 定期清理:定期抽样部分key,判断是否过期,如果过期则删除

定期清理的两种模式

  • SLOW模式执行频率默认是10,每次不超过25ms
  • FAST模式执行频率不固定,但是每次间隔不低于2ms,每次消耗不超过1ms

二、淘汰策略

内存淘汰:就是当Redis内存使用达到设置的阈值时,Redis主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试内存淘汰

Redis支持8中不同策略来选择要删除的key:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值