缓存穿 透
定义
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会直接打到数据库
解决方案
常见的解决方案有两种:
- 缓存空对象
- 优点:实现简单,维护方便
- 缺点:
- 额外的内存消耗
- 可能造成短期的不一致
- 布隆过滤
- 优点:内存占用少,没有多余 Key
- 缺点:
- 实现复杂
- 存在误判的可能
缓存空对象
当客户端访问不存在的数据时,先请求 Redis,但是此时 Redis 中没有数据,此时会访问数据库,但是数据库中也没有这个数据,这个数据穿透了缓存,直击数据库,数据库能承载的并发不如 Redis 那么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库
解决方案就是哪怕这个数据在数据库也不存在,也要把数据存入到 Redis 中,这样下次用户过来访问这个不存在的数据,在 Redis 中就能直接找到,就不会进入数据库了