8

目前我们有 2 个应用服务器,每个都有应用级缓存和集中式数据库服务器。为了使两台服务器的应用程序缓存保持同步,我们在两者之间设置了 JMS 代理。在向 JMS 发送消息的一台服务器上清除缓存时,由于已注册其他服务器,因此它将获取消息并根据消息内容清除特定条目。

由于此消息传递系统在清除缓存条目时增加了延迟,因此在一段时间内,应用程序级缓存之间会出现不一致。

因此,我们考虑使用集中式缓存服务器来避免所有这些额外的工作,以保持所有缓存同步。

我们正在考虑使用Ehcache/TerracottaHazelcast,这些缓存包含结果集、锁信息和一些系统特定的变量。

请为我们建议最佳缓存解决方案。

4

2 回答 2

9

我可能无法为您建议最佳解决方案,但我会尝试提供一些想法:

Hazelcast:提供非常易于使用的分布式地图(以及许多其他值得一看的东西 - 分布式 SQL 查询非常简洁):

Map<String, Object> map = Hazelcast.getMap("xxx");

你就完成了。使用标准 API 处理地图。Hazelcast 配置/设置非常简单(与 Ehcache/TC 相比)。监控网络应用程序也易于使用且很有帮助,但缺少一些东西。对于小型集群(例如您的 2 台服务器),性能应该绰绰有余。

Ehcache/Terracotta:会在你的设置中引入一个新的基础设施组件(Terracotta Server)——可能是一个缺点。根据我的经验,使用此设置在学习和尝试方面非常激烈。承诺是企业级性能和监控设施。

如果您没有极高的性能要求,我个人会选择 Hazelcast 并避免 Ehcache/TC 的复杂性。

于 2011-08-20T18:37:16.940 回答
2

我们一直在使用集中式Memcached服务器(作为 Hibernate 二级缓存和其他缓存要求),它对我们来说运行良好。我们将 Memcached 与XMemcached客户端一起使用,到目前为止它的工作没有任何问题。

于 2011-08-04T13:29:27.480 回答