Spring Redis缓存不驱逐

标签 spring caching redis controller evict

以下工作(导致执行驱逐):

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/

相关文章:

类似Android浏览器的实现,我在哪里缓存图像

redis - 为 Redis 值添加约束

node.js - ioredis 错误 : connect ETIMEDOUT - Can't get connection to local redis server

java - Hibernate 4 升级 (java.lang.NoSuchMethodError : javax. persistence.spi.PersistenceUnitInfo.getValidationMode())

spring - 如何在我的 Controller 中验证(@Valid)之前检查安全访问(@Secured 或 @PreAuthorize)?

java - 预加载和刷新缓存条目时的 Guava 线程管理

c# - Windows 服务和缓存

search - 关于多方面搜索软件堆栈的建议

java - 使用spring hibernate,从只读数据源读取并写入读/写数据源

java - Eclipse Tomcat 发布不工作