如何使用JavaSpring从缓存中删除特定密钥
我想删除特定的缓存密钥。我正在使用JavaSpring。 我在同一个缓存名称下有不同的密钥。我必须删除一些特定的密钥,而不是整个缓存。如何使用JavaSpring从缓存中删除特定密钥,java,spring,caching,Java,Spring,Caching,我想删除特定的缓存密钥。我正在使用JavaSpring。 我在同一个缓存名称下有不同的密钥。我必须删除一些特定的密钥,而不是整个缓存。 缓存代码如下所示 @CacheEvict(value="MyCache", key="CACHE_LIST_COLUMNS + #accountId + '_' + #formType") public void addListColumn(){.. my code..} @CacheEvict(value="MyCache", key="CACHE_SUMM
缓存代码如下所示
@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\u LIST\u COLUMNS10000\u 3
Key2 = CACHE_SUMMARY_FIELDS10000_4
现在我只想删除键缓存\列表\列1000\ 3。
因此,如何获取缓存“MyCache”和键缓存列表列1000\u 3,
并仅删除与此键相关的数据(缓存列表列1000列3)
我必须通过java代码显式删除缓存。不是通过注释。
我的功能是获取缓存键作为输入,并只删除那些特定的键
如果您仍然不理解我的问题,请告诉我。使用该代码,您没有任何缓存。注释仅用于从指定缓存中删除项,而不是放置它们 假设您希望坚持使用弹簧注释:
阅读一下Spring官方文档部分。似乎你唯一缺少的是:
cacheManager.getCache("MyCache").evict(ObjectToEvict);
可以获取对该对象的引用(使用要逐出的键),并使用上面的方法。下面的代码适用于我
for (String cacheName : getCacheManager().getCacheNames()) {
logger.info("Clearing cache: " + cacheName);
Cache cache = getCacheManager().getCache(cacheName);
Object obj = cache.getNativeCache();
if (obj instanceof net.sf.ehcache.Ehcache) {
Ehcache ehCa = (Ehcache)obj;
List<Object> keys = ehCa.getKeys();
for (Object key : keys) {
String keyString = (String)key;
if (keyString.equalsIgnoreCase("CACHE_LIST_COLUMNS_10000_2"))
{
cache.evict(key);
}
}
}
}
for(字符串cacheName:getCacheManager().getCacheNames()){
logger.info(“清除缓存:+cacheName”);
Cache Cache=getCacheManager().getCache(cacheName);
Object obj=cache.getNativeCache();
if(obj instanceof net.sf.ehcache.ehcache){
Ehcache-ehCa=(Ehcache)obj;
List keys=ehCa.getKeys();
用于(对象关键点:关键点){
字符串键字符串=(字符串)键;
if(keyString.equalsIgnoreCase(“缓存列表列10000列2”))
{
cache.execute(键);
}
}
}
}
您可以这样使用SPEL
@Cacheable(value=“mainTables”,key=“#word.concat(':')).concat(#image)”)
可以看到您的问题并不完全清楚,但是您可以使用spring表达式语言引用方法签名中的参数作为逐出的一部分。看到很高兴听到!如果你可以通过选择对你有用的答案来“结束”这个问题,或者创建自己的答案并在那里提供解决方案,那将是一件非常棒的事情。干杯