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

标签 java caching memcached ehcache jcs

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

我搜索了一些缓存服务,发现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/

相关文章:

java - 从 csv 文件读取时忽略逗号值

java - GCache 上的 UnsupportedOperationException

java - 如何在Scala中使用JCache?我收到编译器类型错误 : found String required K

php - 使用 memcached/APC 进行 session 存储?

c# - 定期从网络共享文件夹中读取文件的最有效方法是什么?

java - 无法转换为 com.google.android.gms.location.LocationListener

java - JSF-<h :outputText> making some of words Bold

c# - 如何检查 MemoryCache 中的项目何时过期?

ios - 使用 Core Data 的 transient 属性作为缓存

Angularjs - IE9 缓存行为