Redis键过期删除策略和淘汰策略面试点汇总

有错误处或者有遗漏的知识点,欢迎评论区指出


一、键过期删除策略

1.1 策略介绍和配置


三种策略优劣对比

Redis服务器一般是使用惰性删除和定期删除两种策略,通过配合使用这两种删除策略,服务器可以很好地合理使用CPU时间和避免浪费内存空间之间取得平衡。

定时策略

通过使用定时器,可以及时删除过期键,及时释放内存。目前该方案只存在理论中,Redis目前还未给予支持。

惰性删除

在redis.conf文件中,可以使用如下配置来设置Redis过期键的惰性删除

# 开启过期键惰性删除

lazyfree-lazy-evictionyes

定期删除

定期(比如间隔100ms)执行一次,每次执行都顺序从Redis中获取一部分键,并将已过期的键删除。

默认情况下,hz配置项的值为10,表示1s内执行10次。如果需要修改,可以在redis.conf文件中添加如下配置:

# 设置hz的值为100

hz100

注意:Redis中的hz配置项并不是用来设置过期键定期删除的,它是用来设置Redis服务器的事件处理频率的。Redis服务器会定期执行一些事件,例如过期键惰性删除、心跳检测、脚本执行等。这些事件的执行频率就是由hz配置项来决定的。

1.2 AOF、RDB和复制功能对过期键的处理


1.3 从库访问过期键的bug

从1.2可以得知,从服务器会写入过期键。客户端在访问该键时,从服务器会正常返回该值。直到主服务器删除了该键,从服务器才会删除该键。这可能会对业务产生一定的影响。

有两个解决办法:

    升级Redis到3.2版本。

    业务在访问key时,对过期时间做判断。

二、淘汰策略

Redis 通过淘汰策略来管理内存使用情况,以避免内存溢出。

Redis 的淘汰策略是指,当 Redis 的内存使用量达到用户预设的阈值时,Redis 会根据预设的策略去删除一些数据来释放内存空间。


通过配置文件设置淘汰策略(修改redis.conf文件),修改后重启redis生效

maxmemory-policy volatile-lru

从库淘汰策略设置

noeviction一般用在Redis的从库上,从库不能使用其他具体的淘汰策略,否则将会造成主从之间的数据不一致。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容