1、问题描述
我们在使用SpringCache的@Cacheable注解时,发现并没有设置过期时间这个功能。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
// cacheNames的别名。与cacheNames二选一即可
@AliasFor("cacheNames")
String[] value() default {};
// 也就是我们存储到Redis的key的前缀部分。比如user:, 后面部分来源于参数
@AliasFor("value")
String[] cacheNames() default {};
// 同一个缓存名称的不同参数,key是显式指定。如#id, 表示去参数种的id字段。支持SpEL表达式
String key() default "";
// 同一个缓存名称的不同参数,keyGenerator是因为无法直接取到参数,参数需要经过一系列较为复杂的处理才能获得。通过KeyGenerator生成
String keyGenerator() default "";
// 指定缓存管理器,通常不会指定,使用默认的即可
String cacheManager() default "";
// 指定缓存解析器
String cacheResolver() default "";
// 存入缓存的条件,支持SpEL表达式,结果为true才会存入缓存
String condition() default "";
// 不存入缓存的条件,支持SpEL表达式,结果为true则不会存入缓存
String unless() default "";
// 是否同步回填缓存,并发访问@Cacheable时,因为线程安全问题,缓存还没来得及写入Redis, 就已经开始新的访问了,从而导致数据库被N次访问。
boolean sync() default false;
}