zoukankan      html  css  js  c++  java
  • Redis分片

             分片是分布式存储的突出特点。

    必要性

             如果Redis集群的每个数据库都存储集群中的所有数据,那么集群的总数据存储量受限于可用存储内存最小的数据库节点,形成木桶效应。由于Redis中的 所有数据都基于内存存储,这一问题就尤为突出了,尤其是当使用Redis做持久化存储服务时。从容量上,单个Redis服务器的内存非常容易成为存储瓶 颈,所以需要进行数据分片。

    旧版本Redis的解决办法

             旧版本Redis(2.4)没有提供集群的功能。

             通常使用客户端分片来解决这个问题,即启动多个Redis数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读 取。这样可以实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的1/N。但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的 节点,就需要对数据进行手工迁移,同时在迁移的过程中为了保证数据的一致性,还需要将集群暂时下线。这个过程相对比较复杂。

             考虑到Redis实例非常轻量特点,可以采用预分片技术(presharding)来在一定程度上避免此问题。具体来说就是在节点部署初期,就提前考虑日 后的存储规模,建立足够多的实例(如128个节点),初期数据很少,所以每个节点存储的数据也非常少,但由于节点轻量的特性,数据之外的内存开销并不大, 这使得只需要很少的服务器即可运行这些实例。日后存储规模扩大后,所要做的不过是将某些实例迁移到其他服务器上,而不需要对所有数据进行重新分片并进行集 群下线和数据迁移了。

             总之,客户端分片终归是有非常多的缺点,比如维护成本高,增加、移除节点较繁烦等。

    新版本Redis的解决办法

             Redis3.0版的一大特性就是支持集群(Cluster)功能。

             Redis集群是自动分片和高可用的首选方式。当前还不能完全用于生产环境,但是已经进入了beta阶段。  一旦Redis集群可用,以及支持Redis集群的客户端可用,Redis集群将会成为Redis分片的事实标准。

             集群的特点在于拥有和单机实例同样的功能,同时在网络分区后能够提供一定的可访问性以及对主数据库故障恢复的支持。

              Redis集群是查询路由和客户端分片的混合模式。

  • 相关阅读:
    绕过验证码登陆的方法(适合只需登陆一次可以记住登陆台的网站)
    Throughput Controller(吞吐量控制器) 感觉就像个线程控制器来的
    时间戳 和 日期 转换的方法 (含获取当前时间戳的方法)
    pip使用笔记
    可以模拟多种浏览器的网站
    浏览器兼容性说明
    测试套件的使用
    python 时间对比大小 和 间隔多少天
    django数据库操作
    mysql连接工具记录
  • 原文地址:https://www.cnblogs.com/markhe/p/5587927.html
Copyright © 2011-2022 走看看