gpt4 book ai didi

java - 缓存区域和缓存内存组 : Memcache, EhCache、JCS

转载 作者:行者123 更新时间:2023-12-02 06:05:29 24 4
gpt4 key购买 nike

大多数缓存服务都支持将任何对象缓存为键值对。但我正在寻找一种可以将对象缓存为区域或组的方法。这意味着,缓存对象应该能够分组。一个或多个对象被缓存到一个组中。无论我们对组做什么(删除、更新),都应该影响组中的对象。

我搜索了一些缓存服务,发现JCS支持这个。我应该实现一种通用的方法,因为它可以用于大多数缓存服务。有谁知道任何有帮助的方法或支持资源?

编辑: @ cruftex:假设小商店有一个库存系统。有文具、蔬菜、水果、糖果及其价格等详细信息需要缓存。如果我只需要清除或更新可食用的元素(蔬菜、水果、糖果),而不是文具和缓存的任何其他不可食用的对象集,该怎么办?如果有一种方法可以对“可食用”、“不可食用”进行分组,我可以对特定组进行任何更改,以便所有组成员实例都会受到影响。

最佳答案

目前我看不出您的使用场景是否证明特殊的缓存功能是合理的。

  1. 如果您通过 Cache.put() 在写入配置中更新产品,缓存会自动同步。

  2. 如果您使用持久层,例如JPA,其内部缓存也是同步的。

  3. 如果你自己负责控制缓存,你只需要知道哪些对象属于一个组并进行失效,例如:

    Cache<Integer,Set<Integer>> groupId2productsId = ....
    Cache<Integer, Product> productId2product = ....

    void invalidateGroup(int id) {
    productId2product.removeAll(groupId2productsId.get(id));
    }
  4. 当然,您可以将产品分区到多个缓存(或区域)。然后我会在普通缓存之上执行分区算法。但这是一种不灵活的方法,如果您有多个分区标准或者有重叠,那么您就会遇到麻烦。

一般说明:要按标准寻址一组对象,您需要一个索引结构,或迭代所有内容。通常这是数据库的工作。 EHCache 具有内置搜索功能,因此您可以查询缓存中的对象并使它们无效,但我怀疑 EHCache 是否具有快速/索引实现。我会考虑将这样的东西放入缓存中是否有意义,但它不会是基于“标准”的解决方案。

关于java - 缓存区域和缓存内存组 : Memcache, EhCache、JCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com