
1. 简介
JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。
JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。
当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。
2. 注解
| 注解 | 作用 | 使用位置 | 主要功能 |
|---|---|---|---|
@Cached |
缓存方法结果 | 方法 | 对方法的返回值进行缓存,下次调用相同参数的方法时直接从缓存中获取结果,避免重复执行 |
@CacheUpdate |
更新缓存数据 | 方法 | 在方法执行后,将指定的值放入缓存中,常用于更新操作后同步更新缓存 |
@CacheInvalidate |
删除缓存数据 | 方法 | 在方法执行后,从缓存中删除指定 key 的数据,常用于删除操作后同步清除缓存 |
@CacheInvalidateContainer |
多个 CacheInvalidate 容器 | 方法 | 作为 @CacheInvalidate 的容器,支持在一个方法上使用多个 @CacheInvalidate 注解 |
@CreateCache |
创建缓存实例 | 字段 | 自动注入一个缓存实例到字段中(已废弃,推荐使用 CacheManager.getOrCreateCache) |
@EnableCache |
启用缓存功能 | 类、方法 | 标记需要启用缓存功能的类或方法,通常配合其他缓存注解使用 |
@CacheRefresh |
定时刷新缓存 | 方法、字段 | 定期自动刷新缓存数据,避免缓存失效时大量请求穿透到数据库 |
@CachePenetrationProtect |
防止缓存穿透 | 方法、字段 | 当缓存未命中时,防止多个并发请求同时加载数据,只允许一个请求去加载数据 |
3. 使用AOP实现基于注解的缓存功能
3.1 CacheAdvisor 类
作用与职责
CacheAdvisor 是一个 Spring AOP Advisor,继承自 AbstractBeanFactoryPointcutAdvisor。它负责定义缓存切面的行为,将缓存切入点(Pointcut)和拦截器(Interceptor)结合起来。
核心方法
getPointcut():返回一个 CachePointcut 实例,用于确定哪些类和方法需要被缓存增强
关键属性
cacheConfigMap:配置映射表,存储缓存配置信息
basePackages:基础包名数组,用于限定扫描范围
3.2 CachePointcut 类
作用与职责
CachePointcut 是一个 Spring AOP 切点实现,继承自 StaticMethodMatcherPointcut 并实现了 ClassFilter 接口。它负责判断哪些类和方法应该被缓存增强,即确定缓存注解的应用范围。
核心方法
matches(Class clazz):判断类是否匹配缓存条件
matches(Method method, Class targetClass):判断方法是否匹配缓存条件
matchesImpl(Method method, Class targetClass):实际的匹配逻辑实现
getKey(Method method, Class targetClass):生成方法的唯一键值,用于在缓存配置映射中查找
关键特性
支持基于包名的过滤(basePackages)
排除系统类和代理类
使用 cacheConfigMap 存储和检索方法的缓存配置
3.3 JetCacheInterceptor 类
作用与职责
JetCacheInterceptor 是一个 Spring AOP 拦截器,实现了 MethodInterceptor 和 ApplicationContextAware 接口。它是缓存逻辑的实际执行者,负责拦截带有缓存注解的方法调用并执行相应的缓存操作。
核心方法
invoke(MethodInvocation invocation):拦截方法调用,这是核心的拦截逻辑
setApplicationContext(ApplicationContext applicationContext):设置应用上下文,用于获取 Spring 管理的 Bean
关键流程
获取缓存相关组件(configProvider、cacheManager等)
根据方法信息从 cacheConfigMap 中获取缓存配置
构建 CacheInvokeContext 上下文对象
调用 CacheHandler.invoke(context) 执行缓存逻辑
4. CacheHandler核心处理类
CacheHandler 是 JetCache 框架中一个核心的类,它实现了 Java 标准库中的 InvocationHandler 接口。这个类的主要职责是处理带有缓存注解的方法调用,根据不同的注解类型执行相应的缓存逻辑。
缓存处理分发
根据方法上的注解类型(@Cached、@CacheUpdate、@CacheInvalidate等)分发到不同的处理方法
通过 doInvoke() 方法进行逻辑分发
缓存逻辑实现
invokeWithCached():处理 @Cached 注解,实现缓存读取和加载
invokeWithInvalidateOrUpdate():处理 @CacheUpdate 和 @CacheInvalidate 注解,实现缓存更新和删除
表达式计算
使用 ExpressionUtil 计算缓存 key、value 和条件表达式
支持批量操作(multi 属性)
5. Cache接口

6. JetCacheAutoConfiguration
JetCacheAutoConfiguration 是 JetCache 框架在 Spring Boot 环境下的自动配置类,它负责整合和初始化整个 JetCache 缓存系统。