Spring Cachable Key的定义及应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cachable Key的定义及应用相关的知识,希望对你有一定的参考价值。
Spring缓存注解Cacheable, 主要几个参数说明:
- value 即cacheName,集成ehcache时,会以该命名创建一个cache,cache中再存储不同的key-value。
- key,缓存对象的唯一标识,集成redis时,key的定义需要严格区分,不能简单的按照某个变量来定义,因为cacheName并不能起到区分缓存的作用。
- keyGenerator 自定义的key值生成器,下面会有demo实现。
- cacheManager 选择指定的缓存管理器,一般使用默认管理器,不需要特别指定,
- cacheResolver 定义如何访问缓存列表,默认SimpleCacheResolver实现,NamedCacheResolver也比较常见。
- condition 满足缓存条件(SPEL表达式)的数据才会放入缓存,condition在调用方法之前和之后都会判断。
- unless 用于否决缓存更新的,不同于condition,unless的SPEL表达式仅在方法执行之后判断
下面以Redis集成为例,介绍key的主要用法。
自定义KeyGenerator
@Bean
public KeyGenerator myKeyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append(method.getName());
sb.append("(");
for (Object param : params) {
sb.append(param.toString());
sb.append(",");
}
sb.append(")");
return sb.toString();
}
};
}
固定key示例
@Cacheable(value = CacheConsts.MASTER_SYSTEMCONFIG_CACHE_KEY, key = "‘SYSTEMCONFIG_MAP‘")
public Map<String, SystemConfigDto> loadSystemConfigMap() {
变量key示例
@Cacheable(value = CacheConsts.WS_FILTER_TIME_KEY, key = CacheConsts.WS_FILTER_TIME_KEY + "#appId")
public List<WsTimeFilterDto> loadByAppId(String appId) {
@Cacheable(value = CacheConsts.MASTER_CITY_CACHE_KEY, key = CacheConsts.MASTER_CITY_CACHE_KEY + "#exchangeRateEntity.currency")
public List<ExchangeRateEntity> loadExchangeRate(ExchangeRateEntity exchangeRateEntity) {
自定义Key示例@Cacheable(value = CacheConsts.WS_PRICE_RULE_KEY, keyGenerator = "myKeyGenerator")
condition示例
@Cacheable(value = CacheConsts.MASTER_CITY_CACHE_KEY, key = CacheConsts.MASTER_CITY_CACHE_KEY + "#exchangeRateEntity.currency",condition = "#exchangeRateEntity.currency ne ‘CNY‘ ")
public List<ExchangeRateEntity> loadExchangeRate(ExchangeRateEntity exchangeRateEntity) {
以上是关于Spring Cachable Key的定义及应用的主要内容,如果未能解决你的问题,请参考以下文章
如何在保持缓存自动配置的同时添加自定义@Cacheable缓存?
spring-redis-session 自定义 key 和过期时间