当前位置: 首页 > 知识库问答 >
问题:

spring boot Redis@Cacheable方法未从另一个类调用

汤兴生
2023-03-14

可能是问题似乎是重复的其他,但我已经检查了其他类似的问题,并尝试解决,但没有任何工作。

我正在使用缓存注释对服务类进行注释,如下所示:

@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);
    }
}

我正在另一个服务类中自动生成CacheFacade。当我从那个类调用addRequest时,它可以工作,但当我调用getRequest时,它没有被调用,我尝试在那里添加日志和调试点,但流没有在那里。

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

@Service
public class RequestHandler {


@Autowired
    CacheFacade cacheFac;
    }

谁能告诉我,我做错了什么,为什么@CachePut可以工作,但@Cacheable方法没有被调用。

提前致谢

共有1个答案

凌征
2023-03-14

在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);
}
 类似资料:
  • 问题内容: 在Python中,有没有一种方法可以从另一个类中调用一个类方法?我正在尝试在Python中旋转自己的MVC框架,但无法弄清楚如何从另一个类的一个类调用方法。 这是我想发生的事情: 我正在从PHP慢慢进入Python,因此我正在寻找与PHP等效的Python 。 问题答案: 更新:刚刚在您的帖子中看到了对它的引用。那不一样。用于获取函数对象,然后使用您的参数调用它 现在是一个实际的函数对

  • 问题内容: 我正在研究一个问题,但由于刚开始学习Java而感到非常困惑。我可以理解的任何帮助都会很棒。我必须编写一个具有两个类的程序。主类将从文件中读取内容,并使用第二类来查找文件中相同单词被重复的次数,然后将它们添加到包含单词和单词重复次数的数组中。我可以阅读文件部分。我只是似乎不知道如何从第二个类调用方法以将单词添加到数组并增加计数器。到目前为止,这是我的代码,如果您运行它,您将看到多少错误会

  • 问题内容: 我知道这个问题是重复的,但是我在Internet上找不到答案。 我想从另一个类调用一个方法。 我有Class1和Class2。 在第2类中,我具有该方法: 我想从Class1调用该方法。 感谢您的任何答复。 - - 编辑 - - -— LogCat– 问题答案: 您应该使用以下代码: 如果您不想创建一个新的实例来调用该方法,则可以将方法标为十进制,然后只需调用即可。

  • 我正在开发一个程序,在这个程序中,我必须调用一个提示用户从另一个类输入数据的方法。这个程序应该打印客户的姓名、年龄、地址和性别。然而,我在调用一个输入每个客户信息的方法时遇到了问题。 此外,我还必须创建一种方法,将客户的年龄按升序排序。因此,该程序根据年龄从(最年轻的客户)到(最老的客户)的顺序打印出所有信息。我不知道如何创建一种只对客户年龄进行排序而不对姓名、地址和性别进行排序的方法。如果您有任

  • 嗨我正在努力解决我面临的问题 我想做的是调用test1类的zahl方法 这是我尝试过的,但它什么也没有返回,即使它应该显示我的错误。

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。