Spring/EhCache从缓存中删除特定密钥 @Cacheable(cacheName=“cacheOne”) 公共映射getSomeData(列表标记列表、字符串查询字符串){

Spring/EhCache从缓存中删除特定密钥 @Cacheable(cacheName=“cacheOne”) 公共映射getSomeData(列表标记列表、字符串查询字符串){,spring,ehcache,Spring,Ehcache,我正在使用ehcache with Spring,如上面的代码所示。通过执行以下操作,我可以清除cacheOne中的所有键: cacheManager.getCache(“cacheOne”).removeAll(); 但是,如果我只需要从标记列表中包含特定标记的缓存中删除这些键,该怎么办?例如,我想删除标记列表中包含标记的所有条目,如果标记列表中包含标记,我想删除所有条目 除了已经执行的缓存之外,您所请求的是标记(在您的示例中是cricket)和包含这些标记的键之间的映射 为了存储此映射,您可

我正在使用ehcache with Spring,如上面的代码所示。通过执行以下操作,我可以清除cacheOne中的所有键:

cacheManager.getCache(“cacheOne”).removeAll();


但是,如果我只需要从标记列表中包含特定标记的缓存中删除这些键,该怎么办?例如,我想删除标记列表中包含标记的所有条目,如果标记列表中包含标记,我想删除所有条目

除了已经执行的缓存之外,您所请求的是标记(在您的示例中是cricket)和包含这些标记的键之间的映射

为了存储此映射,您可能需要设计自己的
KeyGenerator
,在创建缓存密钥的同时跟踪此映射。 如果这种清除需要只涉及标记的子集,那么这种映射甚至可能是智能的

默认情况下,Spring不会为您跟踪这些信息,因此您不会有基于配置的方法来跟踪这些信息


另一个选项(不推荐)是通过迭代所有键来强制执行。当数据集增长时,应该很清楚为什么这是一个坏主意。

执行类似于
@CacheEvice(condition=“#{taglist.contains('cricket')}”,key=“whatever”)的操作
为您工作?@geo您是否建议在使用Cacheable的相同方法上使用此注释?这不是我想要的。我想从不同的方法中清除特定键。我建议您在Spring Bean的任何实际适合您需要的方法上使用
@CacheExit
。它绝对不应该在sa上使用将方法命名为
@Cacheable
@geo并获得了它。但对我来说不起作用。我的用例是:在某个时候,我发现我需要从缓存中删除原始标记列表(传递给getSomeData)包含“cricket”的所有项.现在我如何计算出所有必须被逐出的密钥?我想不出任何方法可以使用Spring注释来实现这一点。我对迭代很满意,但有没有办法解密Spring生成的密钥?
@Cacheable(cacheName = "cacheOne")
public Map<String, Object> getSomeData(List<String> taglist,String queryString) {