Redis过期删除策略
如果一直往内存里加key,内存会爆,所以有了过期时间,设置了过期时间的key会被保存到过期字典。
惰性删除+定期删除
Redis的过期删除策略是惰性删除和定期删除搭配。先来分开说说
惰性删除:顾名思义,懒惰,不主动去删,在每次访问key的时候,查看key是否过期。
优缺点:CPU友好、内存不友好
定期删除:每隔一段时间随机从Redis数据库取一些key检查,删除过期的key。
抽取的数量是20个key,如果过期的key占比到1/4,就再抽20个查。
这个循环啥时候停?
要么抽到的key里过期的不超过1/4了
要么设置循环流程的上限时间
优点:内存友好
缺点:
- 定期删除的这个期难以确定,执行的太频繁,对CPU不友好,不频繁,和惰性删除没区别。
- 抽取key时循环时间难以确定
所以,Redis选择惰性删除+定期删除结合起来
内存淘汰策略
当内存中的key过多,达到一个配置的内存阈值时,就会淘汰一些key
内存淘汰策略分为两种
一:不淘汰
noeviction:超过阈值时Redis直接停止服务报错,不淘汰key
二:淘汰
淘汰又分为两种
**PS:先来几个英文缩写:
l:least
r:rencently
f:frequently
u:use
ok,英语小课堂开课
least表示一个否定的意思,意味“最少…”
(一)在设置了过期时间的数据里淘汰
ttl:按照过期时间淘汰马上要过期的key
random:随机
lru:最近最少使用
lfu:最少频率使用(最不常用)
(二)在所有数据范围淘汰
random:随机
lru:最近最少使用
lfu:最少频率使用(最不常用)
关于过期删除策略和内存淘汰策略的思考
Redis操作的是内存,内存满了会爆,为了防爆,出现这俩策略
过期删除是先锋,通过惰性删除++定期删除删除key。如果实在删不过来,内存淘汰来压轴。
反正就是防止内存爆掉。
说人话面试题
Redis过期删除策略说一说
Redis采用的过期策略是惰性删除+定期删除。
先分开来讲,惰性删除是指不主动删除key,在用到这个key的时候看这个key是否过期,过期则删除。定期删除是指每隔一段时间,从Redis数据库里取20个key进行过期时间检查,根据过期时间判断是否删除。如果过期的key超过1/4,则重新取20个key,循环往复直到过期的key小于1/4或者循环时间到达设置的循环时间上限。
那么这两种删除策略各有优缺点,惰性删除CPU友好,内存不友好,可能会有无意义的数据占用空间。而定期删除不好确定检查频率,如果检查太频繁,对CPU不友好,检查不频繁,又和惰性删除差不多。
所以Redis选择了惰性删除+定期删除。
Redis内存淘汰策略有哪些?
首先是不淘汰,noeviction,当占用的内存到达阈值时,redis直接停止服务报错
淘汰策略又分为两种,在设置了过期时间的key里淘汰,和在所有数据里淘汰
这两种都有三种策略:random,随机,lru,从最近最少使用的数据里淘汰,lfu,从使用频率最少的数据里淘汰。
设置过期时间的策略多一种ttl,淘汰马上要过期的key。