Redis复制和redis分片(群集)差异

时间:2010-01-26 12:59:07

标签: redis

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

3 个答案:

答案 0 :(得分:117)

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

分片,也称为分区,是按键分割数据;虽然复制(也称为镜像)是复制所有数据。

Sharding对于提高性能,减少任何一个资源的命中和内存负载都很有用。复制对于高可用性读取很有用。如果您从多个副本中读取数据,则还会降低所有资源的命中率,但所有资源的内存要求保持不变。应该注意的是,虽然您可以写入从站,但复制只是master-> slave。因此,您无法以这种方式扩展写入。

假设您有以下元组:[1:Apple],[2:Banana],[3:Cherry],[4:Durian]我们有两台机器A和B.使用Sharding,我们可能存储键2机器A上有4个;机器B上的密钥为1,3。通过复制,我们将密钥1,2,3,4存储在机器A上,将1,2,3,4存储在机器B上。

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

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

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

答案 1 :(得分:18)

简单来说,这两个概念之间的根本区别在于,使用Sharding来缩放Writes,而Replication用于缩放Reads。正如Alex已经提到的,复制也是实现HA的解决方案之一。

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

关于你的第三个问题,使用Redis Append Only File(AOF)是一个更好的主意,而不是RAM-flush选项。只需很少的成本(就写入速度而言),您可以获得更高的写入可靠性。它非常像mysql二进制日志。建议使用1 fsync /秒。

答案 2 :(得分:0)

同时使用复制和分片

如果您既希望获得高可用性又希望提高性能,则可以同时使用复制和分片来实现这一点。通过分片,您将拥有两个或多个基于键的特定数据实例。然后,您可以复制这些实例中的每一个,以生成一个既可复制又可分片的数据库,这将同时提供可靠性和速度!

enter image description here