基于Java8的缓存框架Caffeine是怎样的
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,基于Java8的缓存框架Caffeine是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Caffeine是一个基于
千家信息网最后更新 2025年12月03日基于Java8的缓存框架Caffeine是怎样的
基于Java8的缓存框架Caffeine是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美。Caffeine受启发于Guava Cache的API,使用API和Guava是一致的。它借鉴了Guava Cache和ConcurrentLinkedHashMap的设计经验。
性能比较
基准测试使用Java microbenchmark工具提供准确的分析。缓存配置为
Caffeine和ConcurrentLinkedHashMap根据CPU数量确定其内部结构的大小 Guava的并发级别配置为64(默认为4,以减少内存使用)。 Ehcache v2在内部被硬编码为100个段,而v3未分段
100%的读操作
读75% 写25%
写100%
上面三种测试图来自于Caffeine官网,从图可知,Caffeine的性能玩爆其他缓存框架。
在Matrix-Web中使用Caffeine
在工程的pom文件引入caffeine的依赖,如下:
com.github.ben-manes.caffeine
caffeine
${caffeine.version}
创建一个抽象类AbstractCaffineCache,该类使用范型来约束缓存的数据类型,并实现了三个方法,put、get、clear。
public abstract class AbstractCaffineCache {
protected LoadingCache loadingCache;
abstract LoadingCache createLoadingCache();
public boolean put(String key, T value) {
if(loadingCache==null){
loadingCache=createLoadingCache();
}
loadingCache.put(key, value);
return Boolean.TRUE;
}
public T get(String key) {
if(loadingCache==null){
loadingCache=createLoadingCache();
}
try {
return loadingCache.get(key);
} catch (Exception e) {
return null;
}
}
public boolean clear(String key) {
if(loadingCache==null){
loadingCache=createLoadingCache();
}
loadingCache.invalidate(key);
return Boolean.TRUE;
}
}
创建UserRolePermissionCache的缓存类,该类缓存类用户的信息、用户的角色信息、用户的权限信息。创建LoadingCache类,该类设置了缓存过期的时间,最大的缓存个数。
public class UserRolePermissionCache extends AbstractCaffineCache {
@Override
LoadingCache createLoadingCache() {
loadingCache = Caffeine.newBuilder()
.expireAfterWrite(10 , TimeUnit.MINUTES)
.initialCapacity(10)
.maximumSize(99999999)
.recordStats()
.build(new CacheLoader() {
@Override
public SysUser load(String key) throws Exception {
return null;
}
});
return loadingCache;
}
}
将UserRolePermissionCache注入到spring ioc中,代码如下:
@Configuration
public class CaffineCacheConfig {
@Bean
public UserRolePermissionCache userRolePermissionCache(){
return new UserRolePermissionCache();
}
}
如何使用,在UserPermissonService中,查询SysUser信息,如果缓存中有数据,则在缓存中取,如果没有,则在数据库中读,并做缓存。
@Component
public class UserPermissonService {
@Autowired
SysUserMapper sysUserMapper;
@Autowired
UserRolePermissionCache userRolePermissionCache;
public SysUser getUserRolePerssion(String userId) {
SysUser sysUser = (SysUser) userRolePermissionCache.get(userId);
if (sysUser == null) {
sysUser = sysUserMapper.selectUserRolePermission(userId);
userRolePermissionCache.put(userId, sysUser);
}
return sysUser;
}
} 看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
缓存
信息
框架
数据
用户
性能
帮助
测试
配置
最大
清楚
一致
三个
个数
代码
内存
内容
基准
大小
对此
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
金融科技与互联网金融考试
阳朔租房软件开发
云计算的网络技术
中天城投集团软件开发招聘
安卓手机网络安全维护大师
安次区网信办网络安全教育活动
校园智慧消防网络技术
德丽莎服务器
网络安全引起了人们的注意英语
辽宁网络技术开发采购
网络技术实验室实验报告
天津公安局网络安全总队长
浙江营销网络技术哪家好
专科软件开发需求
网络安全责任法的心得体会
江苏虚拟服务器管理软件云空间
软件开发者要遵循的协议
投呗武汉互联网科技有限公司
怀旧服服务器埃提耶什阵营比例
天津市网络技术公司
数据库优化 java
网络工程师会软件开发吗
农安先进网络技术哪家好
软件开发0基础培训
软件开发费用怎么记分录
网络安全搜索放大镜手抄报
华三网络技术有限公司
win系统的ntp服务器开
sql数据库完全备份
网络安全法由公安管辖