摘要:是一个基于的缓存系统封装,提供统一的和注解来简化缓存的使用。提供了比更加强大的注解,可以原生的支持两级缓存分布式自动刷新,还提供了接口用于手工缓存操作。缓存失效时间缓存的类型,包括。
之前一直在用Spring Cache进行接口数据的缓存,主要是Spring Cache在对具体key缓存失效时间的设置不是很方法,还要自己去扩展,无意中发现了阿里的JetCache。大部分的需求都能满足,并且有一些很实用的功能,今天给大家介绍下。
JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。
GitHub:https://github.com/alibaba/je...
全部特性:通过统一的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 = false jetcache.remote.default.valueEncoder = java # 缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型 jetcache.local.default.type = linkedhashmap # 控制台输出统计数据,统计间隔,0表示不统计 jetcache.statIntervalMinutes = 15 jetcache.local.default.keyConvertor = fastjson jetcache.remote.default.uri = redis://192.168.0.210:6379/
remote 表示远程缓存
local表示本地缓存
启动类开启缓存:
@SpringBootApplication @EnableMethodCache(basePackages = "com.cxytiandi.jetcache") @EnableCreateCacheAnnotation public class App { public static void main(String[] args) { SpringApplication.run(App.class); } }
@EnableMethodCache
用于激活@Cached注解的使用
@EnableCreateCacheAnnotation
用于激活@CreateCache注解的使用
定义一个简单的实体类来作为数据的缓存,必须实现Serializable接口。
@Data public class User implements Serializable { private Long id; private String name; }
@CreateCache使用
@CreateCache(expire = 100) private CacheuserCache; User user = new User(); user.setId(1L); user.setName("yinjihuan"); // 新增缓存 userCache.put(1L, user); // 删除缓存 userCache.remove(1L);
用起来很简单,就像操作本地Map一样,@CreateCache中有很多配置需要我们自己去指定,不指定则使用默认的,关于配置请查看文档:https://github.com/alibaba/jetcache/wiki/CreateCache_CN
@Cached使用
@Cached(name="getUser.", key="#id", expire = 8, cacheType=CacheType.BOTH) @Override public User getUser(Long id) { User user = new User(); user.setId(1L); user.setName("yinjihuan"); return user; }
name
缓存名称
key
缓存key,追加到name后面构成唯一的缓存key, 使用SpEL指定key,如果没有指定会根据所有参数自动生成。
expire
缓存失效时间
cacheType
缓存的类型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定义为BOTH,会使用LOCAL和REMOTE组合成两级缓存
更多配置的介绍请查看文档:https://github.com/alibaba/jetcache/wiki/MethodCache_CN
今天的介绍就到这里,使用起来还是很方便的,关于更多的功能大家自行去尝试吧,比如缓存定时刷新,缓存命中率统计,自定义序列化方式等等。
整合Apollo的坑
在这边提一个容易被坑到的点,如果你们的配置都是在Apollo中进行管理的话,那么在集成的时候会有个问题,需要在项目中加上下面的配置才行,其余的配置可以放Apollo中。
spring.application.name=district-service app.id=${spring.application.name} apollo.bootstrap.enabled=true // 这是你要加的,指定缓存类型,我这边用的是lettuce jetcache.remote.default.type=redis.lettuce
@Cached定义在接口上的坑
还有一个呢就是@Cached如果定义在接口上就不能指定key属性,框架中会自动根据参数生成key, 如果非得自己用SPEL表达式指定key的话,项目编译设置target必须为1.8格式,并且指定javac的-parameters参数,否则就要使用key="args[0]"这样按下标访问的形式。我建议还是把@Cached的定义放在实现类上,也方便修改。
我这边也录制了一套视频,感兴趣的可以去了解下:http://cxytiandi.com/course/24
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74083.html
摘要:是由阿里巴巴开源的通用缓存访问框架,如果你对很熟悉的话,请一定花一点时间了解一下,它更好用。有了,我们就可以更方便的基于统一的接口访问缓存。 JetCache是由阿里巴巴开源的通用缓存访问框架,如果你对Spring Cache很熟悉的话,请一定花一点时间了解一下JetCache,它更好用。 JetCache提供的核心能力包括: 提供统一的,类似jsr-107风格的API访问Cache...
摘要:淘宝定制基于,是国内第一个优化定制且开源的服务器版虚拟机。数据库开源数据库是基于官方版本的一个分支,由阿里云数据库团队维护,目前也应用于阿里巴巴集团业务以及阿里云数据库服务。淘宝服务器是由淘宝网发起的服务器项目。 Java JAVA 研发框架 SOFAStack SOFAStack(Scalable Open Financial Architecture Stack)是用于快速构建金融...
阅读 1962·2023-04-25 16:53
阅读 1419·2021-10-13 09:39
阅读 587·2021-09-08 09:35
阅读 1590·2019-08-30 13:03
阅读 2100·2019-08-30 11:06
阅读 1765·2019-08-30 10:59
阅读 3170·2019-08-29 17:00
阅读 2233·2019-08-23 17:55