2010-04-27 94 views
2

我应该创建一个简单的复制缓存,使用java作为内部用途,将用于分布式环境。我见过oracle已经实施Replicated Cache Service分布式环境下的Java缓存

我正面临的问题是在执行更新或删除操作时,我获取了其他缓存的锁定,以便更新缓存并更新并通知其他人。这最终会进入死锁状态,同时会被移除。在更新或从缓存中删除时,是否应该遵循任何策略?

  • 我可以在没有主缓存的情况下实现复制缓存吗?
+0

问题不明确!你已经分配了地图A和B.你获得对B中的一个键的锁定来更新A并且锁定A中的一个键来更新B?如果是这样,为什么? 主要缓存是什么意思? 需要更多信息才能回答。 – 2010-05-02 22:42:53

+0

你为什么使用锁定?如果使用锁定和死锁发生,则表示应用程序逻辑错误。 – cpurdy 2014-02-14 19:55:52

回答

1

Ehcache与对等体使用不同的体系结构并使用多播进行同步。检查文档

0

JCS应该为你做的工作,因为它带有在设计配置方面具有良好的灵活性。当我们谈到复制的时候,吸引人的特性就是数据的延迟加载,其中根据该对象的获取请求仅复制所需的数据。这减少了内存占用。

请在apache JCS站点中使用JCS查找远程缓存服务器。

4

您可以结算Gigaspaces XAP这是一个完全事务性的分布式内存数据网格,支持许多其他事物,完全复制的拓扑。

免责声明 - 我为gigaspaces工作。

Eitan

0

我会推荐使用MemCached。它具有进程内存储(在专用缓存服务器上)。此外,缓存服务器是用C/C++编写的,并且在运行时以低CPU命中率和良好的内存利用率实现了良好的性能。请参阅:http://memcached.org

有一个非常好的Java客户端连接到服务器。请参阅:http://code.google.com/p/spymemcached

关于多个高速缓存服务器和选拔机制,去哪个服务器...这里是从下面的文章部分:

在默认配置下,Memcached的客户端使用非常简单 逻辑选择获取或设置操作的服务器。当您调用get()或set()时,客户端将获取缓存键并调用其 hashCode()方法来获取诸如11的整数。然后,将该数字取为 ,并将其除以可用Memcached的数量服务器,说 两个。然后它取其余的值,在这个 的情况下是1。缓存条目将进入Memcached服务器1.此简单的 算法可确保每个 应用程序服务器上的Memcached客户端始终为给定缓存 密钥选择相同的服务器。

而且文章是在这里:

使用memcached的Java企业级性能,第1部分:体系结构和设置http://www.javaworld.com/javaworld/jw-04-2012/120418-memcached-for-java-enterprise-performance.html

使用memcached的Java企业级性能,第2部分:数据库 - 驱动的网络应用程序http://www.javaworld.com/javaworld/jw-05-2012/120515-memcached-for-java-enterprise-performance-2.html