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

  1. 任何人都知道redis复制和redis分片之间的区别?
  2. 他们用什么? Redis将数据存储在内存中,这如何影响复制/分片?
  3. 是否可以同时使用它们?

谢谢!

Sharding几乎是复制的对立面,尽pipe它们是正交的概念,并且可以很好地协同工作。

分片(Sharding)也称为分区(partitioning),是通过密钥分割数据, 而复制也称为镜像,就是复制所有的数据。

分片可以提高性能,减less任何资源的命中和内存负载。 复制对读取的高可用性很有用。 如果您从多个副本中读取数据,则还会降低所有资源的命中率,但所有资源的内存要求保持不变。 应该注意的是,虽然你可以写入一个从机,但复制只有主机 – >从机。 所以你不能用这种方式来扩展写入。

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

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

为了结合这些概念,我们可能会复制每个分片。 在上述情况下,机器A的所有数据(2,4)都可以在机器C上复制,而机器B的所有数据(1,3)可以在机器D上复制。

任何键值存储(Redis只是其中一个例子)都支持分片,尽pipe某些交叉键function将不再起作用。 Redis支持开箱即用的复制。

简而言之,这两个概念之间的根本区别在于,“分片”用于缩放“写入”,而“复制”用于缩放“读取”。 正如Alex所提到的,Replication也是实现HA的解决scheme之一。

是的,如果您考虑如何在集群中的节点间复制碎片,通常它们都会一起使用。

关于第三个问题,使用Redis Append Only File(AOF)是一个比较好的主意,而不是RAM-flush选项。 只需要很小的成本(写入速度),就可以获得更高的写入可靠性。 这很像mysql二进制日志。 1 fsync /秒是推荐使用的选项。