目录
前言:
初认识:
解决方案:
缓存穿透解决方案:
缓存击穿解决方案:
缓存雪崩解决方案:
在日常的开发当中我们使用缓存是一个非常频繁的事情,为了解决接口性能以及高并发的问题,使用缓存是一个非常好的解决方案,但是使用不当也会造成非常难以预估的后果,下面给大家介绍一下在缓存使用中较为常见的三种问题,以及他们的解决方案.
1 . 最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力
2. 这个方式相对来说比较粗暴,只要在数据库查询为空的key,也同样会被放入缓存中,但是缓存的过期时间可以设置为五分钟
最保险的方式就是加锁了,一旦缓存过期,一次只允许一个请求去查询数据库,其他的请求等待第一个请求查询到的数据放入缓存.如果是微服务或分布式项目则建议使用分布式锁,可以使用redis构建分布式锁或者zookeeper构建分布式锁,个人推荐使用redisson
为了防止大量的key在同一时间失效,我们在设置key的时候可以给过期时间添加一个随机值,这样就能够有效防止key在同一时间失效了
