springboot内存缓存_Alibaba 分布式缓存框架 JetCache

5810459922899f4a5a9b5b107299520e.png

今天我们来介绍一下由 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-