今天我们来介绍一下由Alibaba开源的一款缓存框架JetCache。其号称比Spring Cache用起来更加好用,笔者用了之后发现确实比较好用。
JetCache支持本地TTL、两级缓存和分布式缓存自动刷新,开发者也可以手动的去操作缓存实例(类似于Redis/Map操作)。到目前为止共有4个组件可以使用:RedisCache、TairCache(未在github开源)、CaffeineCache(内存)和简单的LinkedHashMapCache(内存)。
JetCache特点
通过一致的Cache API操作缓存。
在方法上面使用注解,就可以实现TTL和两级缓存。
使用注释创建和配置Cache实例。
自动收集Cache实例和方法缓存的访问统计信息。
key生成和value序列化的策略可以定制。
分布式缓存自动刷新和分布式锁定。(2.2)
使用Cache API进行异步访问。(2.2版本以上,redis客户端)
支持Spring Boot。
软件要求
JDK1.8
Spring Framework 4.0.8及以上(可选,支持Annotation)
Spring Boot 1.1.9及以上(可选)
Boot项目配置
maven依赖
解决冲突
MySpringBootApp.java
application.yml
方法缓存
我们可以使用@Cached用在接口方法上面。如下所示:
expire表示返回值User对象,将在3600秒后过期,JetCache默认使用所有入参生成缓存的key。当然我们也可以手动指定key,如下所示:
上面代码中可以看出,我们可以使用SpEL(Spring Expression Language)来设置key和Value,当入参是对象时,可以使用对象中的一个字段,如 #user.userId 来设置。name属性不是必须的,但是起个名字是个好习惯,展示统计数据的使用,会使用这个名字。如果同一个area两个@CreateCache的name配置一样,它们生成的Cache将指向同一个实例。这里面需要注意的是,java代码的编辑级别必须是1.8。
自动刷新
CachePenetrationProtect表示在多线程环境中同步加载数据。
缓存API
我们可以使用@CreateCache注解去创建一个Cache实例,默认超时时间是100秒:
上面代码创建了一个Cache实例。其中cacheType=CacheType.BOTH定义了一个2级缓存(本地和远程),其中本地使用了LRU Cache,上线是50个,操作是可以看做是一个Map,如下所示:
当然我们也可以手动的去创建Cache实例,如下:
高级API
异步API
分布式锁
读取并自动刷新
传统项目配置
如果没有使用spring boot,可以按下面的方式配置(这里使用jedis客户端连接redis为例)。
配置了这个JetCacheConfig类以后,可以使用@CreateCache和@Cached注解。
参考:《JetCache官方文档》