⭐Redis
四、过期数据的删除策略
1、设置过期时间
- 设置过期时间的原因:我们的内存是有限的,如果一直存放的,尽管它能存到磁盘上,但是这些都是又边界的,如果一直存放,那么最终必会导致系统宕机(OOM)
- 过期时间有助于缓解内存的消耗
- 业务场景:短信验证码(比如说一分钟内有效),用户的token
- Redis 通过一个叫做过期字典(可以看作是hash表)来保存数据过期的时间
2、策略
上面设置了过期时间,那么如何对这些过期的数据进行删除呢?
- 惰性删除
- 在根据key进行读数据的时候进行检查,看看是否过期;对CPU友好,但是如果有大量的该删除数据未删除对内存是很崩溃的。
- 定期删除
- 每隔一段时间抽取一批 key 执行删除过期 key 的操作。对内存很友好,但是过长频率的操作可能会对CPU带来很大的影响,所以Redis通过限制删除操作的执行时长和频率来减少对CPU消耗的影响。
- Redis 采用的是 定期删除+惰性删除
五、⭐Redis 内存淘汰机制
我们通过定期删除和惰性删除,还有可能会漏掉大量过期的key未删除的情况,导致内存堆积大量无用的key。所以我们引入了淘汰机制来解决这个问题。
Redis 提供 6 种数据淘汰策略:
- volatile-lru(least recently used):从已设置过期时间的数据集里面挑选出最近最少使用的数据进行淘汰
- volatile-ttl:从已经设置过期时间的数据集里面挑选出将要过期的数据淘汰</