有错误处或者有遗漏的知识点,欢迎评论区指出
一、键过期删除策略
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的从库上,从库不能使用其他具体的淘汰策略,否则将会造成主从之间的数据不一致。