我正在考虑将Java应用程序移植到.NET,该应用程序目前使用EhCache并且坚持要求它支持强一致性(http://ehcache.org/documentation/get-started/consistency-options)
我想使用Redis代替EhCache,但Redis是否支持强一致性或仅支持最终的一致性?
我已经看过有关Redis群集的话题,但我想这还有一段时间了。
或者我看错了吗?如果Redis实例完全坐在不同的服务器上并为两个前端服务器提供服务,那么在我们需要查看Master / Slave风格之前它有多大?
答案 0 :(得分:11)
Redis的单个实例是一致的。在许多实例中存在一致性选项。 @antirez(Redis开发人员)最近写了一篇博文Redis data model and eventual consistency,并建议Twemproxy用于分片Redis,这可以让你在很多实例中保持一致。
我不知道EhCache,所以无法评论Redis是否合适。使用Twemproxy的一个潜在问题(移植到.NET)似乎只能在Linux上运行。
单个Redis实例有多大?取决于你有多少RAM。 它会以多快的速度变大?取决于数据的外观。
那就是说,根据我的经验,Redis可以非常有效地存储数据。我拥有的一个应用程序包含200k用户的信息,20k文章,对象之间的所有关系,每周排行榜,统计数据等(400k密钥总计)在400mb RAM中。
Redis易于使用且使用起来很有趣。试一试,看看它是否符合您的需求。如果您决定使用它并且可能有一天想要进行分片,请从头开始对数据进行分片。
答案 1 :(得分:4)
Redis的开箱即用性不强。您可能需要应用第三方解决方案才能使其保持一致。以下是文档引用:
写安全 Redis Cluster使用节点之间的异步复制,上次故障转移赢得隐式合并功能。这意味着最后选出的主数据集最终将替换所有其他副本。在分区期间可能会丢失写入时,总会有一个时间窗口。然而,在连接到大多数主服务器的客户端和连接到少数主服务器的客户端的情况下,这些窗口是非常不同的。
通常,您需要进行同步复制才能在分布式分区系统中实现强一致性。