解析springboot整合谷歌开源缓存框架Guava|解析springboot整合谷歌开源缓存框架Guava Cache原理
目录
- Guava Cache:?歌开源缓存框架
- Guava Cache使用
- 使用压测?具Jmeter5.x进行接口压力测试:
- 压测?具本地快速安装Jmeter5.x
- 新增聚合报告:线程组->添加->监听器->聚合报告(Aggregate Report)
Guava Cache:?歌开源缓存框架
Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效。Guava官网介绍,下面的这几种情况可以考虑使用Guava Cache:github地址:https://github.com/google/guava/wiki/CachesExplained
愿意消耗一些内存空间来提升速度。
预料到某些键会被多次查询。
缓存中存放的数据总量不会超出内存容量。
文章图片
全内存的本地缓存实现,查询数据时先根据自定义索引判断Guava Cache中是否存在该数据,如果存在就从Guava Cache中取,不存在就从数据库中查询,再保存到Guava Cache中,减少数据库查询的压力
?性能且功能丰富
线程安全,操作简单 (底层实现机制类似ConcurrentMap)
Guava Cache使用
- 添加依赖
com.google.guava guava19.0
- 封装api工具类:
@Componentpublic class BaseCache {private Cache tenMinuteCache = CacheBuilder.newBuilder()//设置缓存初始大小,应该合理设置,后续会扩容.initialCapacity(10)//最大值.maximumSize(100)//并发数设置.concurrencyLevel(5)//缓存过期时间,写入后10分钟过期.expireAfterWrite(600,TimeUnit.SECONDS)//统计缓存命中率.recordStats().build(); private Cache oneHourCache = CacheBuilder.newBuilder()//设置缓存初始大小,应该合理设置,后续会扩容.initialCapacity(30)//最大值.maximumSize(100)//并发数设置.concurrencyLevel(5)//缓存过期时间,写入后1小时 过期.expireAfterWrite(3600,TimeUnit.SECONDS)//统计缓存命中率.recordStats().build(); public Cache getOneHourCache() {return oneHourCache; }public void setOneHourCache(Cache oneHourCache) {this.oneHourCache = oneHourCache; }public Cache getTenMinuteCache() {return tenMinuteCache; }public void setTenMinuteCache(Cache tenMinuteCache) {this.tenMinuteCache = tenMinuteCache; }}
- 实际开发中使用:(查询数据时先根据自定义索引判断Guava Cache中是否存在该数据,如果存在就从Guava Cache中取,不存在就从数据库中查询,再保存到Guava Cache中)
/** * 缓存key管理类 */public class CacheKeyManager {/*** 首页轮播图缓存key*/public static final String INDEX_BANNER_KEY = "index:banner:list"; /*** 首页视频列表缓存key*/public static final String INDEX_VIDEL_LIST = "index:video:list"; /*** 视频详情缓存key, %s是视频id*/public static final String VIDEO_DETAIL = "video:detail:%s"; }
如果存在就从Guava Cache中取,不存在就从数据库中查询,再保存到Guava Cache中
@Servicepublic class VideoServiceImpl implements VideoService {@Autowiredprivate VideoMapper videoMapper; @Autowiredprivate BaseCache baseCache; @Overridepublic List
使用压测?具Jmeter5.x进行接口压力测试:
压测?具本地快速安装Jmeter5.x
简介:GUI图形界?的安装 Jmeter5.x
需要安装JDK8 以上
建议安装JDK环境,虽然JRE也可以,但是压测https需要JDK??的 keytool?具
快速下载:https://jmeter.apache.org/download_jmeter.cgi
?档地址:http://jmeter.apache.org/usermanual/get-started.html
文章图片
解jmeter解压?件??的各个?录:
bin:核?可执??件,包含配置
jmeter.bat: windows启动?件(window系统?定要配置显示?件拓展名)
jmeter: mac或者linux启动?件
jmeter-server:mac或者Liunx分布式压测使?的启动?件
jmeter-server.bat:window分布式压测使?的启动?件
jmeter.properties: 核?配置?件
extras:插件拓展的包
lib:核?的依赖包
Jmeter语?版本中英?切换
控制台修改 menu -> options -> choose language
配置?件修改
bin?录 -> jmeter.properties
默认 #language=en
改为 language=zh_CN
文章图片
新增聚合报告:线程组->添加->监听器->聚合报告(Aggregate Report)
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
lable: sampler的名称启?缓存 压测热点数据接接?Throughput: 14000:
Samples: ?共发出去多少请求,例如10个?户,循环10次,则是 100
Average: 平均响应时间
Median: 中位数,也就是 50% ?户的响应时间
90% Line : 90% ?户的响应不会超过该时间 (90% of the samples took no more than
this time. The remaining samples at least as long as this)
95% Line : 95% ?户的响应不会超过该时间
99% Line : 99% ?户的响应不会超过该时间
min : 最?响应时间
max : 最?响应时间
Error%:错误的请求的数量/请求的总数
Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类?为
qps、tps
KB/Sec: 每秒接收数据量
文章图片
文章图片
不启?缓存 压测热点数据接?
视频轮播图接? Throughput : 2700
文章图片
文章图片
当数据访问量较大时,比如主页信息等,可以考虑使用Guava Cache,可以将程序频繁用到的少量数据存储到Guava Cache中,以改善程序性能!
【解析springboot整合谷歌开源缓存框架Guava|解析springboot整合谷歌开源缓存框架Guava Cache原理】到此这篇关于解析springboot整合谷歌开源缓存框架Guava Cache原理的文章就介绍到这了,更多相关框架整合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- [源码解析]|[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
- Android系统启动之init.rc文件解析过程
- Spring|Spring Boot 整合 Activiti6.0.0
- springboot使用redis缓存
- 小程序有哪些低成本获客手段——案例解析