-
第十一章 SpringCache常用注解介绍+框架案例实战
第1集 SpringCache框架常用之Cacheable实战
简介:SpringCache框架常用注解Cacheable
-
Cacheable注解
- 标记在一个方法上,也可以标记在一个类上
- 缓存标注对象的返回结果,标注在方法上缓存该方法的返回值,标注在类上缓存该类所有的方法返回值
- value 缓存名称,可以有多个
- key 缓存的key规则,可以用springEL表达式,默认是方法参数组合
- condition 缓存条件,使用springEL编写,返回true才缓存
- 案例
//对象
@Cacheable(value = {"product"}, key="#root.methodName")
//分页
@Cacheable(value = {"product_page"},key="#root.methodName + #page+'_'+#size")
-
spEL表达式
-
methodName 当前被调用的方法名
- root.methodname
-
args 当前被调用的方法的参数列表
- root.args[0]
-
result 方法执行后的返回值
- result
-
第2集 SpringCache框架自定义CacheManager配置和过期时间
简介:SpringCache框架自定义CacheManager配置和过期时间
- 修改redis缓存序列化器和配置manager过期时间
@Bean
@Primary
public RedisCacheManager cacheManager1Hour(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = instanceConfig(3600L);
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
@Bean
public RedisCacheManager cacheManager1Day(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration config = instanceConfig(3600 * 24L);
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(config)
.transactionAware()
.build();
}
private RedisCacheConfiguration instanceConfig(Long ttl) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.registerModule(new JavaTimeModule());
// 去掉各种@JsonSerialize注解的解析
objectMapper.configure(MapperFeature.USE_ANNOTATIONS, false);
// 只针对非空的值进行序列化
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 将类型序列化到属性json字符串中
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(ttl))
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
}
第3集 SpringCache框架自定义缓存KeyGenerator
简介:SpringCache框架自定义缓存KeyGenerator
- Key规则定义麻烦,支持自定规则
- 实战
@Bean
public KeyGenerator springCacheDefaultKeyGenerator(){
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
return o.getClass().getSimpleName() + "_"
+ method.getName() + "_"
+ StringUtils.arrayToDelimitedString(objects, "_");
}
};
}
-
使用
- key 属性和keyGenerator属性只能二选一
@Cacheable(value = {"product"},keyGenerator = "springCacheCustomKeyGenerator", cacheManager = "cacheManager1Minute")
第4集 SpringCache框架常用之CachePut实战
简介:SpringCache框架常用注解CachePut
-
CachePut
- 根据方法的请求参数对其结果进行缓存,每次都会触发真实方法的调用
- value 缓存名称,可以有多个
- key 缓存的key规则,可以用springEL表达式,默认是方法参数组合
- condition 缓存条件,使用springEL编写,返回true才缓存
-
案例实战
@CachePut(value = {"product"},key = "#productDO.id")
第5集 SpringCache框架常用之CacheEvict实战
简介:SpringCache框架常用注解CacheEvict
-
CacheEvict
-
从缓存中移除相应数据, 触发缓存删除的操作
-
value 缓存名称,可以有多个
-
key 缓存的key规则,可以用springEL表达式,默认是方法参数组合
-
beforeInvocation = false
- 缓存的清除是否在方法之前执行 ,默认代表缓存清除操作是在方法执行之后执行;
- 如果出现异常缓存就不会清除
-
beforeInvocation = true
- 代表清除缓存操作是在方法运行之前执行,无论方法是否出现异常,缓存都清除
-
-
案例实战
@CacheEvict(value = {"product"},key = "#root.args[0]")
第6集 SpringCache框架常用之多注解组合Caching实战
简介:SpringCache框架多注解组合Caching
-
Caching
- 组合多个Cache注解使用
- 允许在同一方法上使用多个嵌套的@Cacheable、@CachePut和@CacheEvict注释
-
实战
@Caching(
cacheable = {
@Cacheable(value = "product",keyGenerator = "xdclassKeyGenerator")
},
put = {
@CachePut(value = "product",key = "#id"),
@CachePut(value = "product",key = "'stock:'+#id")
}
)
来源:https://www.cnblogs.com/Xd17324217006/p/14943591.html