什么是缓存穿透,如何解决? 叁歲伎倆 2022-10-30 12:27 5阅读 0赞 **缓存穿透**:指在高并发场景下,如果某一个 key 被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求到达数据库,而当该 key 对应的数据库本身就是空的情况下,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力。 **缓存穿透解决方案**: **1. 缓存空对象** 对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非 null ),如果是缓存单个对象,可以通过字段标识来区分。这样避免请求穿透到后端数据库。 同时,也需要保证缓存数据的时效性。这种方式实现起来成本较低,比较适合命中不高,但可能被频繁更新的数据。 **2. 单独过滤处理** 对所有可能对应数据为空的 key 进行统一的存放,并在请求前做拦截,这样避免请求穿透到后端数据库。这种方式实现起来相对复杂,比较适合命中不高,但是更新不频繁的数据。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RkMjAxNjEyNA_size_16_color_FFFFFF_t_70][] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RkMjAxNjEyNA_size_16_color_FFFFFF_t_70]: /images/20221024/bba3ef5142864e149b7447957a8cae5b.png
还没有评论,来说两句吧...