springboot之本地缓存(guava与caffeine)
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,1. 场景描述因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友。2.解决方案2.1 使用guava作为本地缓存初步的想法是使用guava,因为本身项目中就有g
千家信息网最后更新 2025年02月01日springboot之本地缓存(guava与caffeine)
1. 场景描述
因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友。
2.解决方案
2.1 使用guava作为本地缓存
初步的想法是使用guava,因为本身项目中就有guava的denpency。
2.1.1 pom文件
需要3个dependency,如下:
org.springframework.boot spring-boot-starter-cache org.springframework spring-context-support 4.3.18.RELEASE com.google.guava guava 24.0-jre
2.1.2 java类
(1)GuavaCacheManager
新建bean,返回及配置guava的GuavaCacheManager。
import com.google.common.cache.CacheBuilder;import org.springframework.cache.CacheManager;import org.springframework.cache.annotation.EnableCaching;import org.springframework.cache.guava.GuavaCacheManager;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.concurrent.TimeUnit;/*** * @auther: 软件老王*/@Configuration@EnableCachingpublic class GuavaCacheConfig { @Bean public CacheManager cacheManager() { GuavaCacheManager cacheManager = new GuavaCacheManager(); cacheManager.setCacheBuilder( CacheBuilder.newBuilder(). expireAfterWrite(6, TimeUnit.HOURS). maximumSize(1000)); //软件老王,6小时过期,最大1000条 return cacheManager; }}
(2)spring注解标签使用缓存
/*** * @auther: 软件老王*/ @Cacheable(value = "ruanjianlaowang") public VO getUserInfo(String token) { VO vo = userauthClient.verifyToken(token); return vo; }
guava本地缓存完成。
2.2 spring框架提供的本地缓存方案
spring中已经提供了抽象类,默认只需要配置加载jar包,配置type就可以了,但是从spring5开始,将guava的剔除掉了,替换成了caffeine,spring做了测试,作为本地缓存caffeine比guava要高出好多,我们也改成了caffeine作为本地缓存。
springboot与guava、caffeine等本地缓存,springboot1的时候还有guava,springboot2里面就把guava的缓存接口去掉了,所以前面guava本地缓存才需要定义Configuration,在这里面的话,就只需要在配置文件里面定义类型就会自动注入了。
2.3 caffeine本地缓存
2.3.1 pom文件
com.github.ben-manes.caffeine caffeine 2.8.0
2.3.2 配置文件
spring: cache: type: caffeine cache-names: bc.gateway.ut caffeine:# spec: maximumSize=5000,expireAfterWrite=20s spec: maximumSize=5000,expireAfterAccess=3600s
具体参数含义:
/*** @auther: 软件老王*/• initialCapacity=[integer]: 初始的缓存空间大小• maximumSize=[long]: 缓存的最大条数• maximumWeight=[long]: 缓存的最大权重• expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期• expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期• refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
2.3.3 使用方式还是spring的标签不用动:
/*** * @auther: 软件老王*/ @Cacheable(value = "ruanjianlaowang") public VO getUserInfo(String token) { VO vo = userauthClient.verifyToken(token); return vo; }
2.4 关于spring缓存标签的说明
四个标签:
(1)@Cacheable,首先在缓存中查询,没有的话,进方法执行,执行完成后返回值放缓存;
(2)@CachePut,不进行查询判断,直接新增或者更新缓存内容,类似add或update;
(3)@CacheEvict,直接清除,类似delete。
(4)@Caching,1,2,3个组合
value | 缓存的名称,在 spring 配置文件中定义,必须指定至少一个 | 例如: @Cacheable(value="laowang_cache1") @Cacheable(value={""laowang_cache1,"laowang_cache2"} |
key | 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | @Cacheable(value="laowang_cache1",key="#userName") |
condition | 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存 | @Cacheable(value="laowang_cache1", condition="#userName.length()>11") |
I'm 「软件老王」,如果觉得还可以的话×××更新秒知!欢迎讨论×××
缓存
软件
老王
配置
文件
标签
最大
时间
更新
不用
参数
方案
方法
项目
查询
组合
内容
名称
含义
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
聚科睿网络技术 王金周
包头代驾软件开发公司
网络安全防护一体化
艺涵网络技术有限公司
江西常用软件开发单价
固定ip搭建服务器
网络安全的五个基本要素是
梦网络技术
2022绝地求生切换服务器
网络运维与网络安全是学什么的
科技股中的互联网
备份磁盘源数据库
网络安全运营txt下载
oracle数据库中回滚
购入软件开发费会计分录
明日之后怎么付费换服务器
宝山区库存网络技术价格走势
遂宁健康行业直销软件开发
数据库中怎样查找一个表
万维题库 数据库
日付服务器
网络安全小论文320字
手机如何登陆虚拟服务器
河南多功能软件开发制造价格
杀手6服务器
数据库ssms怎么改语言
我叫mt4原角色服务器注册已满
软件开发有哪些发明专利
程序员数据库原理及使用方法
表格中清除隐藏数据库