我在一个方法中缓存了一些查询
@Override
@Cacheable(cacheNames = "user-actions")
public UserAction getUserAction(UUID userId) {
...
}
我想用另一种方法逐出缓存。例如,如果方法具有相同的签名,它就可以工作
@CacheEvict(cacheNames = "user-actions")
public void evictUserLevel(UUID userId) {
log.info("Cache user-actions has been evicted");
}
但如果我不通过,有没有办法驱逐缓存 userId
要删除缓存的方法,或者它是否有多个参数?这不起作用:
@CacheEvict(cacheNames = "user-actions")
public void processEvent(UserEvent event, UUID userId) {
...
}
2条答案
按热度按时间pprl5pva1#
这对我有用
fhity93d2#
引用文件
默认密钥生成
因为缓存本质上是键值存储,所以缓存方法的每次调用都需要转换成一个适合缓存访问的键。开箱即用,缓存抽象使用一个简单的
KeyGenerator
基于以下算法:如果没有给定参数,则返回0。
如果只给出一个参数,则返回该示例。
如果给定了多个参数,则返回从所有参数的哈希值计算出的键。
因此下面的签名不起作用,因为密钥是从
event
以及userId
.但,如果我不将userid传递给要逐出缓存的方法,或者如果它有多个参数,是否有方法逐出缓存?
对于无参数
套
allEntries=true
,将清除所有条目。对于多个参数
指定的参数
key
,详见自定义密钥生成声明。