缓存雪崩
什么是缓存雪崩呢
缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求。 这就好比雪崩一样,摧枯拉朽之势,数据库的压力可想而知,可能直接就被这么多请求弄宕机了
针对 Redis 服务不可用的情况:
- 采用 Redis 集群,避免单机出现问题整个缓存服务都没办法使用。
- 限流,避免同时处理大量的请求。
针对热点缓存失效的情况:
- 设置不同的失效时间比如随机设置缓存的失效时间。
- 缓存永不失效。
但是缓存时间的应用也不是特别好,因为对于这个缓存时间的应用实际上还是比较多的,比如在对于验证码验证登陆的情况,我们平常使用的验证码的登录也是需要有一定的失效时间的,如果设置了比较长的缓存时间可能就会导致没有办法达到需要使用的效果。但是如果把这个设置在传统的数据里的话,肯定是就是需要自己来判断过期,这样更麻烦并且性能要差很多。
缓存穿透
什么是缓存穿透呢?
其实这个问题如果理解了Redis 的数据判断流程就很好理解了
那么穿透就是透过了缓存直接进入数据库的这个操作就是缓存穿透
怎么解决
最基本的就是首先做好参数校验,一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等。
或者由于需要判断缓存是否存在这个数据,我们可以做一个那个布隆过滤器,因为Redis是有key-value结构的数据,需要有判断key值才能获取到数据的,那么这个时候我们就可以通过判断这个key值是否是合理的来判断这个请求是否正常,如果没有再这个合理的key的合理范围就返回一个异常