温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于Java8的缓存框架Caffeine是怎样的

发布时间:2021-12-02 17:03:13 阅读:286 作者:柒染 栏目:大数据
Java开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

基于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%的读操作

基于Java8的缓存框架Caffeine是怎样的  

读75% 写25%

基于Java8的缓存框架Caffeine是怎样的  

写100%

基于Java8的缓存框架Caffeine是怎样的  

上面三种测试图来自于Caffeine官网,从图可知,Caffeine的性能玩爆其他缓存框架。

 

在Matrix-Web中使用Caffeine

在工程的pom文件引入caffeine的依赖,如下:

<dependency>	<groupId>com.github.ben-manes.caffeine</groupId>	<artifactId>caffeine</artifactId>	<version>${caffeine.version}</version></dependency>
 

创建一个抽象类AbstractCaffineCache,该类使用范型来约束缓存的数据类型,并实现了三个方法,put、get、clear。

public abstract class AbstractCaffineCache<T> {    protected LoadingCache<String, T> loadingCache;    abstract LoadingCache<String, T>  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<SysUserextends AbstractCaffineCache {    @Override    LoadingCache createLoadingCache() {         loadingCache = Caffeine.newBuilder()                .expireAfterWrite(10 , TimeUnit.MINUTES)                .initialCapacity(10)                .maximumSize(99999999)                .recordStats()                .build(new CacheLoader<StringSysUser>() {                    @Override                    public SysUser load(String key) throws Exception {                        return null;                    }                });        return loadingCache;    }}
 

将UserRolePermissionCache注入到spring ioc中,代码如下:

@Configurationpublic class CaffineCacheConfig {    @Bean    public UserRolePermissionCache userRolePermissionCache(){        return new UserRolePermissionCache();    }}
 

如何使用,在UserPermissonService中,查询SysUser信息,如果缓存中有数据,则在缓存中取,如果没有,则在数据库中读,并做缓存。

@Componentpublic class UserPermissonService {    @Autowired    SysUserMapper sysUserMapper;    @Autowired    UserRolePermissionCache<SysUser> 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;    }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4588934/blog/4425830

AI

开发者交流群×