当前位置:   article > 正文

JAVA面试题分享三百五十七:SpringBoot多级缓存解决方案_java多级缓存

java多级缓存

目录

前言

1. 什么是多级缓存

2. Caffeine快速入门

2.1. 项目准备

2.2. 使用

2.3. 驱逐策略

3. 一级缓存

3.1. Caffeine配置

3.2. 实现缓存逻辑

3.3. 测试

4. 二级缓存

4.1. Redis配置

4.2. 缓存注解

4.3. 测试

5. 一级缓存更新的问题

6. 分布式场景下的问题

6.1. 问题分析

6.2. 问题解决

6.3. 测试


前言

SpringBoot实现项目更删改查后,会有新的问题需要解决,就是并发大的问题,一般而言,解决查询并发大的问题,常见的手段是为查询接口增加缓存,从而可以减轻持久层的压力。 按照我们以往的经验,在查询接口中增加Redis缓存即可,将查询的结果数据存储到Redis中,执行查询时首先从Redis中命中,如果命中直接返回即可,没有命中查询Mysql,将解决写入到Redis中。 这样就解决问题了吗?其实并不是,试想一下,如果Redis宕机了或者是Redis中的数据大范围的失效,这样大量的并发压力就会进入持久层,会对持久层有较大的影响,甚至可能直接崩溃。 如何解决该问题呢,可以通过多级缓存的解决方案来进行解决。

1. 什么是多级缓存

图片

由上图可以看出,在用户的一次请求中,可以设置多个缓存以提升查询的性能,能够快速响应。

  • 浏览器的本地缓存

  • 使用Nginx作为反向代理的架构时,可以启用Nginx的本地缓存,对于代理数据进行缓存

  • 如果Nginx的本地缓存未命中,可以在Nginx中编写Lua脚本从Redis中命中数据

  • 如果Redis依然没有命中的话,请求就会进入到Tomcat,也就是执行我们写的程序,在程序中可以设置进程级的缓存,如果命中直接返回即可。

  • 如果进程级的缓存依然没有命中的话,请求才会进入到持久层查询数据。

以上就是多级缓存的基本的设计思路,其核心思想就是让每一个请求节点尽可能的进行缓存操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/875480
推荐阅读
相关标签