是否有可以“跨缓存重用/共享条目”的JVM分布式缓存?

时间:2015-11-23 02:13:37

标签: caching serialization jvm ehcache distributed

是否存在可以“跨缓存重用/共享条目”的JVM分布式缓存,就像您可以在本地JVM缓存中一样,即在本地缓存中,当您将相同的条目放入地图时使用两个不同的键,两个键使用相同的引用。我没有看到这个选项,或者不知道在分布式缓存中这样做的简单方法。我知道有序列化涉及但是使用JVM,RPC和一些业务标识符,即使在分布式缓存中也应该可以保留单个副本。在分布式缓存中解决一个问题就是进行多次缓存查找,这会使目的失败。

以下是每个人都必须遇到的常见分布式缓存问题场景:  假设您按照名称,ID,...开始缓存产品,在ProductCache中单独“复制相同的产品”。  然后,在ProductCategoryCache中使用category作为键,开始缓存Collection per ProductCategory。  然后,您开始缓存建议:使用客户端ID或名称作为ClientProductsCache中的密钥的每个客户端的集合。  ...

此模型的问题是每个不断增长的产品条目都存在大的问题,不仅在同一个ProductCache中复制不同的密钥,而且在同一个分布式JVM中的不同其他缓存中也是如此。我认为没有任何理由应该这样。特别是如果您从ProductCache获取条目,然后将其关联或添加为对ProductCategory集合缓存的引用。如果您构建自己的JVM缓存(例如,使用每个缓存的ConcurrentHashMap),则会自动在所有引用中复制Product1中的更改​​,通过维护哪些集合使用它,可以跨缓存进行删除。

如何在基于Java JVM的缓存中实现相同的功能,例如EhCache,Hazelcast,Gemfire或Apache Ignite / Geode。

这不仅节省了大量空间,而且可以在一个缓存/区域而不是很多地方进行更改。

希望我们不必为此目的设计自己的缓存。

2 个答案:

答案 0 :(得分:0)

除了在DSO时代(Terracotta 3.x系列)使用缓存上的IDENTITY模式,我不认为它曾在其他地方进行过。 Terracotta的DSO就是关于集群JMM& amp;在整个集群中提供对象标识语义。但是这已经停止了。

现在有人说,虽然您可以使用旧的Ehcache / Terracotta部署来实现,但您也应该知道这带来了真正严峻的挑战并且需要考虑自己的一系列新问题。不是说它不可能,而是......具有挑战性;)

答案 1 :(得分:0)

你应该考虑使用Apache点燃它看起来像你想要的那样。

相关问题