JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache
接口用于手工缓存操作。当前有四个实现,RedisCache
、TairCache
(此部分未在github开源)、CaffeineCache
(in memory)和一个简易的LinkedHashMapCache
(in memory),要添加新的实现也是非常简单的。
全部特性:
Cache
实例Cache
实例和方法缓存的自动统计JetCache需要JDK1.8、Spring Framework4.0.8以上版本。Spring Boot为可选,需要1.1.9以上版本。如果不使用注解(仅使用jetcache-core),Spring Framework也是可选的,此时使用方式与Guava/Caffeinecache类似。
com.alicp.jetcache jetcache-starter-redis 2.5.5
application.yml
jetcache: statIntervalMinutes: 15 areaInCacheName: false local: default: type: caffeine keyConvertor: fastjson limit: 100 expireAfterWriteInMillis: 120000 remote: default: type: redis keyConvertor: fastjson valueEncoder: kryo valueDecoder: kryo poolConfig: minIdle: 5 maxIdle: 20 maxTotal: 50 host: 10.15.13.128 port: 6379 password: 123456
@SpringBootApplication @EnableMethodCache(basePackages = "com.*") @EnableCreateCacheAnnotation public class Starter { public static void main(String[] args) { SpringApplication.run(Starter.class, args); } }
public interface ShopService { @Cached(name= RedisKeys.APP_SHOP, key="#shopId",expire = 1200, cacheType = CacheType.REMOTE) Shop getShopFromCachedById(Integer shopId);
@CacheUpdate(name = RedisKeys.APP_SHOP, key = "#shopInfo.userId", value = "#shopInfo") void addAppShopInfo(AppShop shopInfo);
}
cacheType有LOCAL/REMOTE/BOTH三种选择,分别代表本地内存/远程Cache Server(例如Redis)/两级缓存,可根据情况选用,合理的使用LOCAL或BOTH类型可以降低Cache Server的压力以及我们提供的服务的响应时间
cacheType为REMOTE或者BOTH的时候,刷新行为是全局唯一的,也就是说,即使应用服务器是一个集群,也不会出现多个服务器同时去刷新一个key的情况
一个key的刷新任务,自该key首次被访问后初始化,如果该key长时间不被访问,在stopRefreshAfterLastAccess指定的时间后,相关的刷新任务就会被自动移除,这样就避免了浪费资源去进行没有意义的刷新
当前支持的缓存系统包括以下4个,而且要支持一种新的缓存也是非常容易的: