基于Java8的缓存框架Caffeine是怎样的
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,基于Java8的缓存框架Caffeine是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Caffeine是一个基于
千家信息网最后更新 2026年11月01日基于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安全错误
数据库的锁怎样保障安全
互联网科技网
港股互联网科技股
互联网 卓越科技
互联网 科技服务平台
美国互联网前沿科技
华脉科技工业互联网产品
移动互联网科技股
华服互联网科技官网
浙江互联网科技研学营
荆州市昕露互联网络科技有限公司
青岛科技大学互联网大赛研究生
996高科技互联网公司
烟台灵鸽互联网科技有限公司
互联网第三次科技革命特征
山东星卡互联网科技有限公司官网
工业互联网科技创业
郑州欣桑互联网科技有限公司
广西科技产业互联网是什么
福仕德教育科技互联网
株洲百竞科技的互联网营销顾问
花魁咖啡
互联网属科技
远信互联网科技
云创客互联网科技公司
互联网科技公司需要的职位
青岛中康互联网医疗科技有限公司
互联网系的金融科技公司
互联网科技公司有风险吗
崇明区互联网教育科技售后服务
有人说阿里系是互联网科技企业