【问题标题】:Spring + Ehcache : How to cache find all resultSpring + Ehcache:如何缓存查找所有结果
【发布时间】:2012-05-24 14:18:05
【问题描述】:

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

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

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

这可能吗?

【问题讨论】:

    标签: java spring ehcache


    【解决方案1】:

    我将解释 及其二级缓存和查询缓存的工作原理,以便为您提供一个总体思路。首先,Hibernate 在所谓的二级缓存中缓存所有单个实体(例如,通过findById 类型的操作检索)。

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

    失效相当简单:INSERTDELETE 操作应该使整个findAll 查询缓存失效,而UPDATEs 是透明的。

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

    【讨论】:

    • 我没有使用hibernate,所以我想我的问题没有简单的解决方案。所以我想我只会在 INSERT/DELETE 时使所有缓存失效,并且只缓存所有条目。 (对于我的参考数据)并缓存单个数据(对于实际的域对象)。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2023-04-09
    相关资源
    最近更新 更多