1.缓存穿透
缓存穿透是指在使用缓存系统的时候,大量的查询请求访问不存在于缓存的数据,导致这些请求都直接访问后端数据库或者其他的存储系统,从而增加了系统的负载和响应的时间
原理:
- 查询不存在的数据:当一个查询请求到达缓存系统,并且要查询的数据不存在缓存中,缓存系统无法为请求提供所需的数据,并将请求转发到后端数据库或者其他存储系统
- 频繁的查询请求:如果有大量的查询请求都访问不存在于缓存中的数据,会导致每个请求都直接的访问后端的存储系统,因此会增加系统的负担和响应时间
解决方案:
布隆过滤器:用于快速的过滤掉请求的数据不在缓存中的数据,可以快速的过滤掉一部分
不存在于缓存中的查询
2.缓存击穿
缓存击穿是指在使用缓存系统时,某个热点数据过期或者删除后,恰好有大量的并发查询请求访问该数据,导致这些请求都直接访问了后端的存储系统,从而增加了系统的负载和响应时间
原理:
1.缓存失效
2.并发请求
3.直接访问后端
解决方案:
加锁:在缓存失效时,通过加锁机制保证只有一个请求能够进入后端存储系统获取,其他的请求只能等待那个线程释放锁之后才能访问,当从数据库中获取到数据之后将数据缓存到key中的value,然后释放锁,其他的线程就可以访问缓存中的数据了
3.缓存雪崩
缓存雪崩是指大量的key设置了同样的过期时间,他们会在同一时刻过期,导致高并发的时候数据库崩溃死掉,大量查询请求不会从缓存中查询,导致这些请求都会直接访问到后端的存储系统,增加了后台的负载和响应时间