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

Spring@Cacheable未缓存

贺栋
2023-03-14
@Cacheable(value="myList", key="#result.method.name")
protected List<MyObject> getMyList() {
   //db query
   //return list of results
}
<cache name="myList"
    statistics="true"
    maxEntriesLocalHeap="1"     
    timeToLiveSeconds="3600">
    <persistence strategy="none" />
</cache> 

共有1个答案

司徒河
2023-03-14

想象一下你去动物园。你通过入口一次,然后付清你的入场费。之后你可以参观狮子、老虎等等...你不必每次都付钱,因为你进去的时候就做了。如果你厌烦了,想去另一个动物园,你就得出去,去下一个,再付钱。

类是动物园,方法是动物,缓存代理是入口。当有人调用您的类时,它会通过缓存一次。当她在,并调用同一类的另一个方法时,它不会再次通过缓存。只是再出再进的时候,就经过了缓存。

您可以使用一个讨厌的技巧来覆盖这个叫做“inject yourself”:

public class YourClass {
    @Autowired
    private YourClass instance;

    @Cacheable
    public String method1() {
          // now you go through the cache again
          return instance.method2();
    }

    @Cacheable
    public String method2() {
          return "2";
    }
}
 类似资料:
  • 目前,我正在使用Spring缓存和/注释。 我想得到某种控制台日志语句,如

  • 我正在使用SpringFramework 3.2编写一个java项目。4. 我有许多SQL查询需要缓存10秒钟。 我知道用注释我可以缓存函数结果。 我不明白的是如何缓存只有10秒。我知道你可以给可缓存注释添加条件,但是我很难弄清楚如何给这些条件添加时间。 如能提供有关该问题的任何信息,将不胜感激。

  • 我很清楚关于这个话题有多个问题,但我就是弄不懂它的意思。问题似乎是没有将新值添加到@cacheable列表中。 调试完问题后,我发现问题似乎出在钥匙上。 下面是代码片段 所以当我调用save方法时,用于缓存的关键字是incrementing integer,或者1,2,3...但是当我尝试获取所有文档时,缓存使用SimpleKey[]作为键。如果我尝试为@Cacheable使用相同的键,我会得到S

  • 是否可以配置Spring,以便在缓存未命中时,对可缓存方法的调用将被阻止,直到可缓存方法执行一次并填充缓存? 在我的例子中,我处理的是数据库中的数据,这些数据不会经常更改。事实上,如果这些数据更改,则需要重新启动应用程序。我可以创建方法,并在每个服务启动时初始化数据,但这似乎不像注释那样“优雅”。 我计划将EhCache与Spring注释一起使用。 更新: 以下是我在尝试使用@PostConstr

  • 当我调用我用注释的方法时,我知道缓存没有被使用,因为我在方法内部进行了打印,如果使用了缓存,就不应该打印它。 在日志中,我知道缓存正在初始化 我应该提到调用该方法的方法是常规Java

  • 我想缓存以下结构的方法: 对于