基于Java8的缓存框架Caffeine是怎样的
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,基于Java8的缓存框架Caffeine是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Caffeine是一个基于
千家信息网最后更新 2024年11月24日基于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安全错误
数据库的锁怎样保障安全
数据库系统开发中困难任务
无限传感器网络技术
英雄联盟分多少个服务器
棋牌软件开发服务价格
xp远程服务器管理工具
网络安全检查抽查
如何避免无法登录服务器
iphone13激活连接服务器失败
数据库表验证网站
中级数据库工程师哪里可以查
互联网科技感名片
数据库sql语言学习
数据库多媒体及安全试题
如何增强我的网络安全意识
ps42k21怎么连不上服务器
用什么数据库储存文件
试述网状数据库的缺点
天使之战在哪个服务器好
无锡智能刀片服务器供应
沭阳环保网络技术哪家好
组态王与数据库连接通信函数
开店宝显示服务器失败
民法典如何保护网络安全
数据库设计多对多一对多
数据库ms级
弘历软件开发花多少钱
国家网络安全宣传周的吉祥物
云服务器 学习
数据库加密函数测试
城固网络安全大队