目录
五、Redis如何配置Key的过期时间?他的实现原理是什么?
一、为什么使用缓存?
1、高性能
2、高可用
二、什么是缓存穿透?缓存击穿?缓存雪崩? 怎么解决?
1. 缓存穿透: 缓存中查不到,数据库中也查不到。
解决方案:
1)对参数进行合法性校验。
2)将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的Key占满,这一类缓存的有效期要设置得短一点。
3) 引入布隆过滤器,在访问Redis之前判断数据是否存在。 要注意布隆过滤器存在一定的误判率,并且,布隆过滤器只能加数据不能减数据。
2. 缓存击穿:缓存中没有,数据库中有。一般是出现在存数数据初始化以及key过期了的情况。他的问题在于,重新写入缓存需要一定的时间,如果是在高并发场景下,过多的请求就会瞬间写到DB上,给DB造成很大的压力。
解决方案:
1)设置这个热点缓存永不过期。这时要注意在value当中包含一个逻辑上的过期时间,然后另起一个线程,定期重建这些缓存。
2)加载DB的时候,要防止并发。
3.缓存雪崩: 缓存大面积过期,导致请求都被转发到DB。
解决方案:
1)把缓存的时效时间分散开。例如,在原有的统一失效时间基础上,增加一个随机值。
2)对热点数据设置永不过期。