文章目录
前言
小咸儿的项目中使用redis来做缓存,从而减轻数据库的压力,但是redis中的key和数据过期后,为什么内存空间还没有释放呢?如果内存空间将要满的时候该怎么办呢?接下来小咸儿就来解释一下该如何解决这两个问题。
过期策略:定期删除+惰性删除
redis中的key和数据过期后,为什么内存空间还没有释放呢?
既然提到redis的过期策略,那么该如何解决这个问题就有点苗头了。先来一张统领全局的图
定期删除
redis默认每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。
问题:因为是随机抽取,定期删除可能导致很多过期key到了时间并没有被删除掉,这时候该怎么办呢?惰性删除该上场了。
惰性删除
在你获取某个key时,redis会检查一下,是否设置了过期时间?设置了过期时间是否过期了?如果过期了就删除,不会给你返回任何东西。
问题:实际上,这仍然有问题