Spring + Ehcache:如何缓存查找所有结果

时间:2012-05-17 00:10:16

标签: java spring ehcache

我正在使用Spring + Ehcache作为我的缓存层。 (通过代理)

我想知道你是否可以在同一个缓存中缓存“findAll”结果和“findById”结果,然后CacheEvict特定项目和“findAll”结果(保持项目的其余部分不变)以及更新和再次“findById”时将其加载回缓存?

(或另一种方法是在2个缓存中保存findAll和findById,以及在findAll缓存和findById缓存上的特定项更新CacheEvict allEntries时)

这可能吗?

1 个答案:

答案 0 :(得分:3)

我将解释如何使用其第二级和查询缓存来为您提供一般概念。首先,Hibernate在所谓的二级缓存中缓存所有单个实体(例如,通过findById类型的操作检索)。

如果使用findAll检索所有实体,则会将所有实体的主键放入查询缓存(一个键下)和二级缓存中的所有具体实体。再次调用findAll时,它首先从查询缓存中检索所有主键,然后从二级缓存(或从数据库)中检索所有实体。

失效非常简单:INSERTDELETE操作会使整个findAll查询缓存失效,而UPDATE是透明的。

这应该指导您如何在解决方案中实现这一点。这在Spring中是可能的,但您可能需要编写一些代码,尤其是从查询缓存到二级缓存的部分映射。