
今天我们来介绍一下由 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。
软件要求
- JDK 1.8
- Spring Framework 4.0.8及以上(可选,支持Annotation)
- Spring Boot 1.1.9及以上(可选)
Boot 项目配置
maven 依赖
com.alicp.jetcache jetcache-starter-redis 2.5.3
解决冲突
redis.clients jedis 2.9.0
MySpringBootApp.java
@SpringBootApplication@EnableMethodCache(basePackages = "com.moguhu.oc")@EnableCreateCacheAnnotationpublic class MySpringBootApp { public static void main(String[] args) { SpringApplication.run(MySpringBootApp.class); }}
application.yml
jetcache: statIntervalMinutes: 15 areaInCacheName: false local: default: type: linkedhashmap keyConvertor: fastjson limit: 100 remote: default: type: redis keyConvertor: fastjson valueEncoder: java valueDecoder: java poolConfig: minIdle: 5 maxIdle: 20 maxTotal: 50 host: ${redis.host} port: ${redis.port}
方法缓存
我们可以使用@Cached用在接口方法上面。如下所示:
public interface UserService { @Cached(expire = 3600, cacheType = CacheType.REMOTE) User getUserById(long userId);}
expire表示返回值User对象,将在3600秒后过期,JetCache默认使用所有入参生成缓存的key。当然我们也可以手动指定key,如下所示:
public interface UserService { @Cached(name="userCache-