- 数据过期策略
一.什么是数据过期策略?
redis会对key设置过期时间,当key过期后会对key按照不同的规则进行删除,这些删除规则就是数据过期策略。
二.redis中有哪些数据过期策略?
redis中有两种数据过期策略:惰性删除和定期删除。
1.惰性删除
(1)介绍:key过期后不去管它,当要用到该key时,会检查其是否过期,若过期则删除,若未过期则返回该key。
(2)优点:对cpu友好,无需浪费时间去检查当前未用到的key是否过期。
(3)缺点:对内存不友好,可能会有大量已过期且未被用到的数据堆积在内存。
2.定期删除
(1)介绍:每隔一段时间就对一定量的key进行检查,删除里面过期的key。
(2)定期删除有两种模式,对应不同的检查频率
- slow模式:定时任务,执行频率默认为10hz(每秒10次),单次耗时不超过25ms。
- fast模式:执行频率不固定,但两次间隔不低于2ms,每次耗时不超过1ms。
执行耗时段的原因:尽量不影响主进程的工作。
redis的数据过期策略:惰性删除+定期删除两种策略配置使用。
- 数据淘汰策略
一.什么是数据淘汰策略?
当redis中内存不足时,此时再向redis中添加新的key,redis会先采用某种规则将内存中原数据删除掉,再添加新数据,这种删除规则就是数据淘汰策略。
二.redis中有哪些数据淘汰策略?
redis中提供了8中数据淘汰策略:
1.noeviction:不淘汰任何的key,但内存已满时不允许再添加新数据,是默认策略。
2.volatile-ttl:对设置了过期时间的key,比较key的ttl剩余值,值越小越先被淘汰。
3.allkeys-random:对全体的key进行随机淘汰。
4.volatile-random:对设置了ttl的key进行随机淘汰。
5.allkeys-lru:对全体的key使用lru算法进行淘汰。
6.volatile-lru:对设置了ttl的key使用lru算法进行淘汰。
7.allkeys-lfu:对全体的key使用lfu算法进行淘汰。
8.volatile-lfu:对设置了ttl的key使用lfu算法进行淘汰。
(1)lru:Least Recently Used,最近最少用策略,当前时间减去最后一次访问时间,值越大越先被淘汰。
(2)lfu:Least Frequently Used,最少频率使用策略,统计访问频率,值越小越先被淘汰。
三.数据库有1000w数据,redis只能存20w数据,如何保证redis中存的都是热点数据?
使用allkeys-lru数据淘汰策略,留下的都是经常访问的热点数据。
四.redis的内存用完了会发生什么?
主要是看数据淘汰策略是什么,如果是使用了默认的noeviction策略,则会直接报错。