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

问题描述 投票:45回答:2
  1. 有人知道Redis复制和Redis分片之间的区别吗?
  2. 它们有什么用? Redis将数据存储在内存中,这如何影响复制/分片?
  3. 是否可以同时使用它们?

谢谢!

redis
2个回答
122
投票

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

共享,也称为分区,是按键对数据进行拆分;复制(也称为镜像)是复制所有数据。

共享有助于提高性能,减少任何一种资源的点击量和内存负载。复制对于获得高可用性的读取很有用。如果您从多个副本中读取数据,则还将降低所有资源的命中率,但是所有资源的内存需求均保持不变。应该注意的是,虽然可以写入从属设备,但是复制仅是master-> slave。因此,您无法通过这种方式扩展写入。

[假设您有以下元组:[1:Apple],[2:Banana],[3:Cherry],[4:Durian],我们有两台机器A和B。通过分片,我们可以存储密钥2,在机器A上为4;和密钥1,3在计算机B上。通过复制,我们在计算机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只是一个例子)都支持分片,尽管某些交叉键功能将不再起作用。 Redis支持开箱即用的复制。


20
投票

简单来说,这两个概念之间的根本区别在于,分片用于缩放写入,而复制用于缩放读取。如Alex所述,复制也是实现HA的解决方案之一。

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

关于您的第三个问题,最好使用Redis仅附加文件(AOF),而不是RAM-flush选项。以较小的成本(就写入速度而言),您将获得更高的写入可靠性。这很像mysql二进制日志。建议使用1 fsync / second。

© www.soinside.com 2019 - 2024. All rights reserved.