java - Spring boot Redis @Cacheable 方法没有被另一个类调用

标签 java spring-boot caching redis

可能是这些问题似乎与其他问题重复,但我已经检查了其他类似问题并尝试了解决方案,但没有任何效果。

我有一个用缓存注释注释的服务类,如下所示:

@Service
@CacheConfig(cacheNames={"ReqCache"})
public class ReqCache implements CacheFacade{

    @Autowired
   RequestRepository requestRepo;

    @Cacheable
    public Request getRequest(String sessionId) {
        System.out.println("in cache comp");


        return requestRepo.get(sessionId);
        }

@CachePut(value = "ReqCache", key = "#p0.sessionId")
    public void addRequest(Request request, int partition) {
        requestRepo.add(lterequest,partition);
    }
}

我正在另一个服务类中 Autowiring CacheFacade。 当我从该类调用 addRequest 时,它可以工作,但是当我调用 getRequest 时,它没有被调用,我尝试在那里添加记录器和调试点,但流程没有到那里。

这是我调用缓存服务类的主要服务类:

@Service
public class RequestHandler {


@Autowired
    CacheFacade cacheFac;
    }

谁能告诉我我做错了什么以及为什么@cacheput 有效但@cacheable 方法没有被调用。

提前致谢

最佳答案

在 Springboot 中,@Cacheable 注解告诉 spring 缓存这些结果(这是通过代理工作的,所以如果你想读取缓存的结果,用 @Cacheable 注解的方法需要是第一个在您的服务中调用的方法)...我假设它不允许您在那里调试,因为它正在读取缓存的结果?它缓存返回值,而不是整个函数。

所以在这个例子中,第一次用“Jim”调用这个方法时,它会打印 Jim,进行数据库查找,然后返回 5。但是在那之后 spring 记住“Jim”已经是这个方法的参数,所以 spring 知道“Jim”返回 5,而不是再次执行整个方法。它会在缓存被驱逐后再次执行整个方法

@Cacheable
private int method1(String name){
     System.out.println(name);

     //db lookup
     return repo.getId(name);
}

关于java - Spring boot Redis @Cacheable 方法没有被另一个类调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225029/

相关文章:

java - 4sum 在 Java 中的实现,来自 leetcode

java - 创建主题失败”,"exception":"\norg. apache.kafka.common.errors.UnsupportedVersionException

java - Jersey 工厂尝试创建 @Context 变量两次

javascript - 通过 AJAX 获取 Javascript

java - (oracle.jbo.NoXMLFileException) JBO-26001 : XML File not found for the Container Error

java - 在 java 中返回多个原始对象。不推荐?

c# - 缓存具有类似性能的内存数据集并将其与数据库更改相关联的最佳方法是什么?

ios - NSMutableDictionary 缓存和/或大小限制

java - 无法安装 e(fx)clipse

java - 如何将方法附加到类型?