将Spring 3.2与EhCache 2.9结合使用。我注释了一个零参数方法,如下所示:
@Cacheable(value="myList", key="#result.method.name")
protected List<MyObject> getMyList() {
//db query
//return list of results
}
EhCache配置:
<cache name="myList"
statistics="true"
maxEntriesLocalHeap="1"
timeToLiveSeconds="3600">
<persistence strategy="none" />
</cache>
我想要缓存数据库结果。由于此方法没有参数,因此我选择了方法名称作为缓存键。
当我对此进行测试时,数据库在每次方法调用时都会命中,我不确定为什么。有任何想法吗?
更新
因此,在进行故障排除之后,我发现了一些有趣的东西。当前,该getMyList
方法(定义了缓存的方法)在调用它的同一个类中。该方法基本上调用DAO来查询列表。如果我移到getMyList
另一个仅充当代理的类,然后更改原始调用程序以调用此新代理,则缓存将起作用。我无法解释原因。有输入吗?
想象一下您去了动物园。您只需进入一次入口并支付入场费。之后,您可以参观狮子,老虎等……您不必每次都付费,因为您在进入时就已经付款了。如果您觉得无聊而又想去另一个动物园,则必须出去,去下一个动物园,然后再付费。
您的类是动物园,您的方法是动物,缓存代理是入口。当有人调用您的课程时,它会一次通过缓存。当她进入并调用同一类的另一个方法时,它不会再次通过Cache。仅当您外出和再次进入时,您才通过缓存。
您可以使用一个讨厌的技巧来覆盖此问题,即自己注入:
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";
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句