文章目录
一 Redis设置过期时间
Redis有一个很实用的功能,可以为数据库的值设置过期时间。这在很多场景下都有用,例如一定时限内有效的验证码,一些登录信息。每次set key的时候,都可以使用expire time设置过期时间
二 Redis过期回收机制
那么Redis是如何回收过期的值的?有两种方式:定期删除和惰性删除
-
定期删除
默认每隔100ms就抽取一些设置了过期时间的值检查,如果过期就删除 -
惰性删除
设置了过期时间的值如果过期了,手动检查这些值才会被redis删除,这是一种比较懒的方式,所以叫惰性删除 -
为什么不直接删除所有过期值
在高并发场景下,一瞬间可能产生很多值,想要删除所有过期值,就得遍历一遍所有设置了过期时间的值,这显然不可取,遍历几万甚至几十万几百万个值是很耗时的
三 Redis过期回收机制的问题
我们可以从回收机制的方式中看出来,随机抽取设置了过期时间的值判断是否删除,那肯定会有漏网之鱼,如果一瞬间数据量庞大,那么漏网之鱼会更多,那些没有被回收的过期值就这么堆积起来,堆积到一定数量就会导致内存不足了
四 解决Redis过期回收机制的问题(内存淘汰)
那我们如果解决上述问题呢?Redis引入了内存淘汰机制,提供了六种机制可供选择。从大类上主要分为最近最少删除和随机删除。
所谓内存淘汰,即在内存不足时,我们应该删除一部分可能用不到的值,把他们的空间腾出来给最新的值,这是因为在很多业务中,最新最热的操作或者用户总是优先级较高的