缓存区域和缓存内存组:memcache、ehcache、jcs

pcww981p  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(394)

大多数缓存服务都支持将任何对象缓存为键和值对。但我正在寻找一种方法,可以将对象缓存为区域或组。这意味着,缓存对象应该能够分组。一个或多个对象被缓存到组中。我们对组所做的任何操作(删除、更新)都应该对组中的对象产生影响。
我搜索了一些缓存服务,发现jcs支持这一点。我应该实现一个通用的方法,因为它可以用于大多数缓存服务。有人知道有什么方法或支持资源可以帮助吗?
编辑:@cruftex:假设一个小商店的库存系统。有文具项目,蔬菜,水果,糖果和他们的价格和其他细节都需要缓存。如果我只需要清除或更新可以吃的东西(蔬菜、水果、糖果),而不需要更新文具和缓存的任何其他不可食用的对象集,该怎么办?如果有一种方法可以像“可食用”、“不可食用”这样分组,我可以对特定的组进行任何更改,这样所有组成员示例都会受到影响。

ws51t4hk

ws51t4hk1#

目前我看不出您的使用场景是否需要一个特殊的缓存特性。
如果通过cache.put()以直写配置更新产品,缓存将自动同步。
如果你使用一个持久层,比如jpa,它的内部缓存也是同步的。
如果您自己负责控制缓存,则只需知道哪些对象属于某个组并执行无效化,例如:

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

void invalidateGroup(int id) {
  productId2product.removeAll(groupId2productsId.get(id));
}

当然,您可以将产品划分为多个缓存(或区域)。然后我会在普通缓存上做一个分区算法。但这是一种不灵活的方法,如果您有多个分区标准或重叠,那么您就有麻烦了。
一般说明:要根据一个条件寻址一组对象,您需要一个索引结构,或者遍历所有内容。通常这是数据库的工作。ehcache内置了一个搜索功能,因此您可以查询缓存中的对象并使它们失效,但我怀疑ehcache是否有一个快速/索引的实现。我会考虑把这样的东西放到缓存中是否有意义,但是它不会是一个基于“标准”的解决方案。

相关问题