博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里开源的缓存框架JetCache
阅读量:6241 次
发布时间:2019-06-22

本文共 2890 字,大约阅读时间需要 9 分钟。

之前一直在用Spring Cache进行接口数据的缓存,主要是Spring Cache在对具体key缓存失效时间的设置不是很方法,还要自己去扩展,无意中发现了阿里的JetCache。大部分的需求都能满足,并且有一些很实用的功能,今天给大家介绍下。

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。

GitHub:

全部特性:

  • 通过统一的API访问Cache系统
  • 通过注解实现声明式的方法缓存,支持TTL和两级缓存
  • 通过注解创建并配置Cache实例
  • 针对所有Cache实例和方法缓存的自动统计
  • Key的生成策略和Value的序列化策略是可以配置的
  • 分布式缓存自动刷新,分布式锁 (2.2+)
  • 异步Cache API (2.2+,使用Redis的lettuce客户端时)
  • Spring Boot支持

体验一下

增加Maven配置:

com.alicp.jetcache
jetcache-starter-redis
2.5.11
复制代码

配置内容:

# 采用Java序列化存储jetcache.remote.default.valueDecoder = java# Key的转换器jetcache.remote.default.keyConvertor = fastjson# 是否加入缓存key前缀jetcache.areaInCacheName = falsejetcache.remote.default.valueEncoder = java# 缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型jetcache.local.default.type = linkedhashmap# 控制台输出统计数据,统计间隔,0表示不统计jetcache.statIntervalMinutes = 15jetcache.local.default.keyConvertor = fastjsonjetcache.remote.default.uri = redis://192.168.0.210:6379/复制代码
  • remote 表示远程缓存
  • local表示本地缓存

启动类开启缓存:

@SpringBootApplication@EnableMethodCache(basePackages = "com.cxytiandi.jetcache")@EnableCreateCacheAnnotationpublic class App {    public static void main(String[] args) {        SpringApplication.run(App.class);    }}复制代码
  • @EnableMethodCache 用于激活@Cached注解的使用
  • @EnableCreateCacheAnnotation 用于激活@CreateCache注解的使用

定义一个简单的实体类来作为数据的缓存,必须实现Serializable接口。

@Datapublic class User implements Serializable {	private Long id;		private String name;}复制代码

@CreateCache使用

@CreateCache(expire = 100)private Cache
userCache;User user = new User();user.setId(1L);user.setName("yinjihuan");// 新增缓存userCache.put(1L, user);// 删除缓存userCache.remove(1L);复制代码

用起来很简单,就像操作本地Map一样,@CreateCache中有很多配置需要我们自己去指定,不指定则使用默认的,关于配置请查看文档:

@Cached使用

@Cached(name="getUser.", key="#id", expire = 8, cacheType=CacheType.BOTH)@Overridepublic User getUser(Long id) {	User user = new User();	user.setId(1L);	user.setName("yinjihuan");	return user;}复制代码
  • name 缓存名称
  • key 缓存key,追加到name后面构成唯一的缓存key, 使用指定key,如果没有指定会根据所有参数自动生成。
  • expire 缓存失效时间
  • cacheType 缓存的类型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定义为BOTH,会使用LOCAL和REMOTE组合成两级缓存

更多配置的介绍请查看文档:

今天的介绍就到这里,使用起来还是很方便的,关于更多的功能大家自行去尝试吧,比如缓存定时刷新,缓存命中率统计,自定义序列化方式等等。

整合Apollo的坑 在这边提一个容易被坑到的点,如果你们的配置都是在Apollo中进行管理的话,那么在集成的时候会有个问题,需要在项目中加上下面的配置才行,其余的配置可以放Apollo中。

spring.application.name=district-serviceapp.id=${spring.application.name}apollo.bootstrap.enabled=true// 这是你要加的,指定缓存类型,我这边用的是lettucejetcache.remote.default.type=redis.lettuce复制代码

@Cached定义在接口上的坑 还有一个呢就是@Cached如果定义在接口上就不能指定key属性,框架中会自动根据参数生成key, 如果非得自己用SPEL表达式指定key的话,项目编译设置target必须为1.8格式,并且指定javac的-parameters参数,否则就要使用key="args[0]"这样按下标访问的形式。我建议还是把@Cached的定义放在实现类上,也方便修改。

我这边也录制了一套视频,感兴趣的可以去了解下:

转载地址:http://itvia.baihongyu.com/

你可能感兴趣的文章
2019年互联网女皇趋势报告:小程序创新创业商业模式引领全球
查看>>
C# 递归模型定义。赋值
查看>>
复合文字
查看>>
建立TCP连接的三次握手
查看>>
2017年软件工程第四次作业-1代码规范
查看>>
apache与jetty整合,用mod_proxy
查看>>
[转]使用 C++11 编写 Linux 多线程程序
查看>>
[译]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上
查看>>
[译]Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
查看>>
关于数据库设计--博客系统2
查看>>
AWS 认证攻略(SA)
查看>>
iOS完整学习路线图
查看>>
JAVA_Thread_生产消费模式
查看>>
IceCTF-Matrix
查看>>
java.util.HashSet源码分析
查看>>
yield与yield from
查看>>
两数相加LeetCode
查看>>
c/c++ 获取文件夹或目录下的文件
查看>>
bzoj3316: JC loves Mkk(单调队列+分数规划)
查看>>
P4046 [JSOI2010]快递服务
查看>>