14

我正在考虑将 Java 应用程序移植到 .NET,该应用程序当前大量使用 EhCache,并坚持要支持强一致性(http://ehcache.org/documentation/get-started/consistency-options)。

我想用 Redis 代替 EhCache,但是 Redis 支持强一致性还是只支持最终一致性?

我看到过关于 Redis Cluster 的讨论,但我想这离发布还有一点距离。

还是我看错了?如果 Redis 实例完全位于不同的服务器上并为两个前端服务器提供服务,那么在我们需要查看主/从式事件之前,它会变得多大?

4

2 回答 2

17

Redis 的单个实例是一致的。在许多实例中存在一致性选项。@antirez(Redis 开发人员)最近写了一篇博文,Redis 数据模型和最终一致性,并推荐使用Twemproxy对 Redis 进行分片,这可以让您在许多实例上保持一致性。

我不知道 EhCache,所以无法评论 Redis 是否是合适的替代品。Twemproxy 的一个潜在问题(移植到 .NET)是它似乎只能在 Linux 上运行。

单个 Redis 实例可以有多大?取决于你有多少内存。它会以多快的速度变大?取决于您的数据的外观。

也就是说,根据我的经验,Redis 非常有效地存储数据。我拥有的一个应用程序在 400mb 的 RAM 中保存了 20 万用户的信息、2 万篇文章、对象之间的所有关系、每周排行榜、统计数据等(总共 33 万键)。

Redis 易于使用且使用起来很有趣。尝试一下,看看它是否满足您的需求。如果您确实决定使用它并且可能有一天想要分片,请从一开始就对您的数据进行分片。

于 2012-12-14T00:38:34.297 回答
7

Redis 开箱即用不是强一致的。您可能需要应用第 3 方解决方案以使其保持一致。这是来自文档的引用:

写安全 Redis Cluster 使用节点间异步复制,las​​t failover 胜出隐式合并功能。这意味着最后选出的主数据集最终会替换所有其他副本。分区期间总是有可能丢失写入的时间窗口。然而,在连接到大多数主控的客户端和连接到少数主控的客户端的情况下,这些窗口非常不同。

通常您需要同步复制以在分布式分区系统中实现强一致性。

于 2017-03-17T15:12:24.140 回答