项目X包含以下几部分:在Spring /休眠中正确使用高速缓存
a。 Spring数据存储库具有不同的方法,如:
@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamA(String paramA);
@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamB(String paramB);
@CacheEvict("xobjects")
<E extends XObject> E save(E entity);
b。 Hibernate也使用“xobjects”缓存。
问题#1 既然有加的对象的2种方式缓存时相同的对象出现2次,也可能是这种情况。如何更好地解决这个问题?例如使用结果对象中的键。喜欢的东西:
键=“#result.id”
问题#2 我不想从缓存中驱逐所有对象时,“保存”方法被调用,但我不确保当前的实施将起作用。 “保存”方法有xobject作为输入,所以CacheEvict将它用作驱逐的关键,没有我期望会发生的事情。在这里,我相信能够像上面一样使用魔术键的相同方法会很好。
更新#1其实我觉得我的建议能正常工作,这里是一个样本 - https://github.com/zhangkaitao/spring4-showcase/blob/master/spring-cache/src/main/java/com/sishuok/spring/service/UserService2.java 但我需要先进行测试。稍后将分享结果。
您确定要为此使用Spring Cache抽象或使用您的ORM提供程序的第二级缓存,因为它会自动为您执行这些操作。 –
我在想这件事,那很好。我已经用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)标记了XObject并启用了“hibernate.cache.use_second_level_cache”。但是上面的方法没有被缓存。查询缓存会有帮助吗? – ICE