当前位置:  开发笔记 > 后端 > 正文

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

如何解决《Redis复制和redis分片(集群)差异》经验,为你挑选了2个好方法。

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

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

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

假设你有以下元组:[1:Apple],[2:Banana],[3:Cherry],[4:Durian]我们有两台机器A和B.使用Sharding,我们可以存储2,4键机器A; 机器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> 小智..:

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

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

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

假设你有以下元组:[1:Apple],[2:Banana],[3:Cherry],[4:Durian]我们有两台机器A和B.使用Sharding,我们可以存储2,4键机器A; 机器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支持开箱即用的复制.


凉.我认为答案不仅限于redis
很好的答案(一般),但并没有真正回答问题imho :)
我认为这个答案对提问者的要求提供了很好的回应.大大简化,但正确的解释.+1

2> gshx..:

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

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

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

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有