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) {
来源: http://www.bubuko.com/infodetail-2736231.html