【发布时间】:2020-07-16 13:17:57
【问题描述】:
我想删除特定的缓存键。我正在使用java spring。
我在相同的缓存名称下有不同的键。我必须删除一些特定的键,而不是整个缓存。
缓存代码如下,
@CacheEvict(value="MyCache", key="CACHE_LIST_COLUMNS + #accountId + '_' + #formType")
public void addListColumn(){.. my code..}
@CacheEvict(value="MyCache", key="CACHE_SUMMARY_FIELDS + #accountId + '_' + #formType")
public void addSummaryColumn(){.. my code..}
现在,正如您在名称“MyCache”下看到的那样,我必须使用不同的键进行不同的缓存。有人可以指导我如何从特定缓存中获取特定密钥并删除该缓存。
我想删除这个缓存列表:
value="MyCache", key="CACHE_SUMMARY_FIELDS + #accountId + '_' + #formType"
这就是我正在尝试的
StringBuffer cacheNames = new StringBuffer();
for (String cacheName : getCacheManager().getCacheNames()) {
Cache cache = getCacheManager().getCache(cacheName);
cache.clear();
}
此代码的作用是获取名称为“MyCache”的缓存并清除整个 MyCache。但我不想清除所有缓存条目。 例如键是,
CacheEvict(value="MyCache", key="CACHE_LIST_COLUMNS + 10000 + '_' + 3")
CacheEvict(value="MyCache", key="CACHE_SUMMARY_FIELDS + 10000 + '_' + 4")
所以键是 Key1 = CACHE_LIST_COLUMNS10000_3
Key2 = CACHE_SUMMARY_FIELDS10000_4
现在我只想删除键 CACHE_LIST_COLUMNS10000_3。 因此,我怎样才能获得缓存“MyCache”和密钥 CACHE_LIST_COLUMNS10000_3, 并仅删除与此键相关的数据(CACHE_LIST_COLUMNS10000_3)。
我必须通过 java 代码显式删除缓存。不是通过注释。 我的功能是获取缓存键作为输入并仅删除那些特定的键。
如果你还是不明白我的问题,请告诉我。
【问题讨论】:
-
您的要求并不完全清楚,但您可以使用弹簧表达式语言将方法签名中的参数作为驱逐的一部分。见stackoverflow.com/a/10938115/3166303