1.缓存穿透
缓存穿透:当客户端发送的请求在缓存和数据库中均不存在时,那么大量的这种请求信息就会直接打到数据库上,给数据库带来巨大的压力。
解决方法:
1.通过缓存空对象的方法:将没有的数据缓存在redis当中。
2.使用布隆过滤器。
3.热点参数限流。
4.增加请求路径的复杂度。
2.缓存雪崩
缓存雪崩:当有多个key值同时失效时或者redis服务器宕机时,会有大量的数据请求到达数据库,给数据库带来压力(因为数据库的性能没有redis好)。
解决方法:
1.给不同key添加随机的过期时间(TTL)。
2.利用分布式集群来提高redis的高可用。
3.通过使用多级缓存的方式。
3.缓存击穿
缓存击穿:当有一个key值被多次访问并且重建这个key业务很复杂需要长时间时,key失效了,那么大量的请求会到达数据库,给数据库带来巨大的压力。
解决方法
1.让key值永不失效。
2.可以添加互斥锁来保证大量数据不会直接到达数据库,有点是实现简单但是缺点是会降低执行性能。
3.增加逻辑过期,缺点:会读取脏数据并且实现起来复杂。