Redis过期策略经常会使用到,下面详解3种常见的Redis过期策略@mikechen
1.定时删除(Expires)
定义:
定时删除是Redis最常用的过期策略,当设置键的过期时间时,同时会创建一个定时器,在键的过期时间到达时立即删除键。
优点:
保证内存被尽快释放。
缺点:
- 若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key;
- 定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重;
2.惰性删除(Lazy Expiration)
定义:
惰性删除的意思就是当 key 过期后,不做删除动作,等到下次使用的时候,发现 key 已经过期,这时不在返回这个 key 对应的 value ,直接将这个 key 删除掉。
优点:
因为每次访问时,才会判断过期键,所以此策略只会使用很少的系统资源。
缺点:
这种方式有一个致命的弱点,就是会有很多过期的 key-value 明明已经到了过期时间,缺还在内存中占着使用空间,大大降低了内存使用效率。
3.定期删除(Eviction)
定义:
设定一个时间,在 Redis 中默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。
优点:
- 通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理”定时删除”的缺点。
缺点:
在内存友好方面,不如”定时删除”(会造成一定的内存占用,但是没有懒汉式那么占用内存)
在CPU时间友好方面,不如”懒汉式删除”(会定期的去进行比较和删除操作,cpu方面不如懒汉式,但是比定时好)
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获知最新一线技术干货!
