Redis复制和Redis分片(集群)的区别

57
  1. 有人知道 Redis 复制和 Redis 分片的区别吗?
  2. 它们用于什么?Redis 将数据存储在内存中,这如何影响复制/分片?
  3. 是否可以同时使用它们?
3个回答

149

分片(Sharding)和复制(Replication)是两个正交的概念,它们可以很好地结合使用。分片将数据按键进行拆分;而复制则是将所有数据进行拷贝。

分片可用于提高性能,减少任何一个资源的压力和内存负载。复制可用于获得读操作的高可用性。如果从多个副本中读取,还可以减少所有资源的命中率,但所有资源的内存需求保持不变。需要注意的是,虽然你可以向从节点写入数据,但复制只允许主->从的写入方式。因此,你无法通过这种方式扩展写操作。

假设你有如下元组:[1:苹果]、[2:香蕉]、[3:樱桃]、[4:榴莲],并且有两台机器 A 和 B。使用分片,我们可以将键2、4存储在机器A上;键1、3存储在机器B上。使用复制,我们可以将键1、2、3、4同时存储在机器A和机器B上。

通常通过对键执行一致性哈希来实现分片。上面的示例是使用以下哈希函数实现的:h(x){return x%2==0?A:B}。

为了结合这两个概念,我们可以为每个分片进行复制。在上述示例中,机器A的所有数据(2、4)可以复制到机器C上,机器B的所有数据(1、3)可以复制到机器D上。

任何键值存储(Redis 只是其中之一)都支持分片,尽管某些跨键函数将不再适用。Redis支持开箱即用的复制功能。


3
好的(总体来说)回答,但我认为它并没有真正回答问题 :) - Sune Rievers
11
我认为这个回答对提问者所问的问题提供了很好的回应。解释被大大地简化,但是正确的。+1 - Gurpartap Singh
@Alex对于redis复制的高可用性,sentinels也需要进行正确的配置,否则在故障转移时复制将无法正常工作。 - Harshana
1
Redis 集群和 Redis 分片是一样的吗? - steven
我认为,Radis集群依赖于分片(分区)。 - undefined

27

简单来说,Sharding用于扩展写入操作,而Replication用于扩展读取操作。正如Alex所提到的,Replication也是实现高可用性(HA)的解决方案之一。

如果考虑到分片可以在集群中的节点之间进行复制,它们通常一起使用。

关于您的第三个问题,与其使用RAM刷新选项,更好的选择是使用Redis Append Only File(AOF)。仅以写入速度为代价,您会获得更可靠的写入。这很像mysql的二进制日志。建议每秒执行1个fsync。


2

同时使用复制和分片

如果您既需要高可用性又需要提高性能,可以同时使用复制和分片来实现。通过分片,您将有两个或更多的实例,每个实例都基于特定的键存储数据。然后,您可以复制这些实例中的每一个,以产生一个既复制又分片的数据库,从而在同一时间提供可靠性和速度!

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接