以下工作(导致执行驱逐):
fooController {
@ApiEndpoint
public delete(id) {
fooService.deleteFoo(id)
}
}
fooService {
@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {
//delete logic here
}
}
但这不起作用(缓存中没有任何内容被逐出):
fooController {
@ApiEndpoint
public delete(name) {
fooService.deleteFoo2(name)
}
}
fooService {
public void deleteFoo2(String name) {
//delete logic here
deleteFoo(name.getId())
}
@CacheEvict(value = "cache1", key = "#id")
public void deleteFoo(Long id) {
//delete logic here
}
}
为什么我的@CacheEvict 注释仅在直接从 Controller 调用方法时被调用?
我使用 Redis 作为缓存机制。
最佳答案
当您的方法在类内部被调用时,Aop 不工作。 当方法被另一个类调用时它正在工作。 所以你可以在另一个服务中定义 deleteFoo。
关于Spring Redis缓存不驱逐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696076/