Redis是内存型数据库,而我们知道内存资源是有限的,围绕更好的利用内存,下面来了解一下Redis的过期删除策略和内存淘汰策略。
过期删除策略
过期删除策略主要围绕CPU和内存的讨论,期望得到对CPU和内存都友好的过期删除策略方案。
过期删除策略种类
过期删除策略有三种:定时删除、惰性删除、定期删除。
-
定时删除:在为key设置过期时间的同时,创建对应定时器,等定时器计时结束删除该key。
-
优点:key过期即删除,对内存友好。
-
缺点:若有大量key删除,将消耗大量CPU资源,假如CPU资源紧张,会影响响应时间和吞吐量。
-
-
惰性删除:不主动检测过期key,而是每次访问key时判断key是否过期,如果过期再删除。
- 优点:相比方案1,更节省CPU资源
- 缺点:同一时刻可能有大量过期key占用内存空间,可能会存在过期key永不被删除的情况。
-
定期删除:设置间隔时间(如200 ms),每隔一段时间随机检测key是否过期,如果检测到过期key即删除。
- 优点:如果间隔设置合理,一定时间上节省CPU和内存。
- 缺点:间隔时间不好把控
- 如果间隔时间设置过短,会造成大量CPU资源占用。
- 如果间隔时间设置过长,会造成大量过期key占用内存。
Redis的过期删除策略
Redis结合了惰性删除和定期删除的优点,将两种策略结合使用,一定程度上平衡了内存占用与CPU占用。
但是Redis的过期删除策略不能保证过期key一定能删除,所以还会面临内存爆满的情况,这个时候就需要内存淘汰机制了。
Redis内存淘汰机制
内存爆满时,需要内存淘汰机制淘汰key,得到空闲内存以继续工作。
Redis的内存淘汰机制有8种:
volatile-ttl
:选择将要过期的key进行淘汰。volatile-lfu
(Redis 4.0 之后,新增的内存淘汰机制):在有设置过期时间的key中选择最不经常访问的key进行淘汰。volatile-lru
:在有设置过期时间的key中选择最久未使用的key进行淘汰。volatile-random
:在有设置过期时间的key中随机选择key进行淘汰。always-lfu
(Redis 4.0 之后,新增的内存淘汰机制):在所有key中选择最不经常访问的key进行淘汰。always-lru
(Redis 3.0 之前,默认的内存淘汰机制):在所有key中选择最久未使用的key进行淘汰。always-random
:在所有key中随机选择key进行淘汰。noeviction
(Redis 3.0 之后,默认的内存淘汰机制):不淘汰任何key,是返回错误信息。
还没发表评论,快来发表第一个评论吧~