在我的应用程序中,我有多个具有多个键的可缓存方法:
@Cacheable(cacheNames = "valueCodes", key = "{#value, #fieldId, #projectId}")
@Cacheable(cacheNames = "fieldNames", key = "{#field, #value, #projectId}")
@Cacheable(cacheNames = "qi", key = "{#langCode, #question, #projectId}")
@Cacheable(cacheNames = "fieldCodes", key = "{#name, #projectId}")现在,我需要一个cachevict方法,它清除所有缓存,其中仅 #projectId键,它是UUID,匹配:
@CacheEvict(value = {"valueCodes", "fieldCodes", "qi"; "fieldCodes"}, key = "#projectId")我在这的文章中看到这是不可能的,而且
每个cacheNames中只有退出注释的键正则表达式匹配多个元素
我不太清楚这是什么意思,但我想这与在SpEL中使用regex有关。
所以我开始考虑把我的钥匙连接成一个键:
@Cacheable(cacheNames="cahceName", key="concat(#projectId).concat(#otherKey)")并使用regex将所有键与projectId匹配,后面是通配符。但我真的想不出办法来。
我想要达到的目标是可能的吗?如果是的话,我该怎么做?
发布于 2017-08-09 09:54:19
我没有使用注释来通过部分键查找密钥,而是创建了一个bean来管理密钥
发布于 2016-12-06 16:42:04
我想要达到的目标是可能的吗?如果是的话,我该怎么做?
你喜欢做的事是不可能的。
一般来说,缓存的作用就像哈希表,您只能对唯一的键进行操作。选择属于项目id的所有内容将需要缓存中的索引和查询机制。有些缓存有这种功能,但不是全部,并且没有通用的标准来实现这一点。
再次检查是否真正有意义的缓存所有的零碎,属于一个项目的单独。如果所有的东西都需要一起驱逐的话,也许它一直都在一起使用。或者,例如,将ConcurrentHashMap作为值保存在缓存中,该缓存保存属于项目的各种组件。
有关此问题的更多信息,请参见问题:对于多级别的进程内缓存,有什么更好的选择?
可能删除注释并直接使用缓存是有意义的。带有注释的选项是有限的。
https://stackoverflow.com/questions/40992604
复制相似问题