实现思路
- 第 1 步
- 自定义 CacheResolver
- 通过 CacheOperationInvocationContext 获取到方法的参数名和参数值
- 重写一个 cacheName(原始cacheName + “#” + 过期时间拼接在一起)
- 第 2 步
- 重写 CacheManger 的 getCache 方法,通过第一步拼接的 cacheName split 出原始 cacheName 和过期时间
- 根据 split 出来的 cacheName 和过期时间,初始化一个 RedisCacheConfiguration,并通过 createRedisCache(cacheName, cacheConfiguration) 实例化一个 cache
实现代码
关键代码
以下代码基于 spring-boot 2.5.2,其他版本可以参考实现
CacheUtils.java
1 | /** |
Expired.java
1 | import java.lang.annotation.Documented; |
TCacheResolver
1 | import lombok.extern.slf4j.Slf4j; |
TRedisCacheManager.java
1 | import lombok.Getter; |
TRedisAutoConfiguration.java
1 | import lombok.RequiredArgsConstructor; |
测试用例
TRedisApp.java
1 | import org.springframework.boot.SpringApplication; |
TRedisService.java
1 | import lombok.extern.slf4j.Slf4j; |
TRedisTest.java
1 | import lombok.AllArgsConstructor; |