Sring cache缓存的key默认是通过KeyGenerator生成的,
通过继承CachingConfigurerSupport类实现对KeyGenerator的灵活配置
1.前期工作-缓存前缀枚举的创建
package com.sgcc.config;
/**
* @author 作者 Your-Name:***
* @version 创建时间:2020年9月23日 下午2:07:52
* 类说明 活动缓存前缀枚举
*/
public enum AcOperatorEnum {
PROVINCE_OF_ACTIVITY("PROVINCE_OF_ACTIVITY","活动"),
AC_ACTIVITY("ACTIVITY_OPERATOR","活动"),
AC_RULE_R("RULE_R_OPERATOR","活动子项"),
AC_AULE("RULE_OPERATOR","活动规则"),
AC_RULE_ITEM("RULE_ITEM_OPERATOR","活动规则子项"),
AC_REWARD("REWARD_OPERATOR","活动奖励");
private String value ;
private String desc;
private AcOperatorEnum(String value, String desc) {
this.value = value;
this.desc = desc;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static AcOperatorEnum getAcOperatorEnum(String value){
AcOperatorEnum[] values = AcOperatorEnum.values();
for (AcOperatorEnum acOperatorEnum : values) {
if(acOperatorEnum.value.equals(value)){
return acOperatorEnum;
}
}
return null;
}
}
2.配置类编写
package com.sgcc.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 作者 Your-Name:***
* @version 创建时间:2020年9月24日 下午3:52:36
* 类说明 key生成
*/
@Configuration
public class ActivityRedisConfig extends CachingConfigurerSupport{
@Bean
public KeyGenerator activityKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(RedisLockPrefix.getOsgRedisPrefix(2*60*60));
sb.append(AcOperatorEnum.AC_ACTIVITY.getValue());
sb.append(":");
sb.append(params[0]);
return sb.toString();
};
}
@Bean
public KeyGenerator ruleRKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(RedisLockPrefix.getOsgRedisPrefix(2*60*60));
sb.append(AcOperatorEnum.AC_RULE_R.getValue());
sb.append(":");
sb.append(params[0]);
return sb.toString();
};
}
@Bean
public KeyGenerator ruleKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(RedisLockPrefix.getOsgRedisPrefix(2*60*60));
sb.append(AcOperatorEnum.AC_RULE_R.getValue());
sb.append(":");
sb.append(params[0]);
return sb.toString();
};
}
@Bean
public KeyGenerator ruleItemKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(RedisLockPrefix.getOsgRedisPrefix(2*60*60));
sb.append(AcOperatorEnum.AC_RULE_ITEM.getValue());
sb.append(":");
sb.append(params[0]);
return sb.toString();
};
}
@Bean
public KeyGenerator rewardKeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(RedisLockPrefix.getOsgRedisPrefix(2*60*60));
sb.append(AcOperatorEnum.AC_REWARD.getValue());
sb.append(":");
sb.append(params[0]);
return sb.toString();
};
}
}
3引用
@Cacheable(value = "redisDemo",keyGenerator = "activityKeyGenerator")
public Activity findAcActivitiesById(String paramId) {
return (Activity) mybatisDao.queryForObject("ActivityMapper.getActivityByAcIdNew", paramId);
}
方法在执行到这里是会根据activityKeyGenerator自动生成key并存进redis
4总结
缓存cache注解开启见下一篇,
另:新技术的学习需要勇气!