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集群是查询路由和客户端分片的混合模式。

  • 相关阅读:
    【软件测试部署基础】maven的认识
    测试管理那些事[组建测试团队的思考]
    Django 框架基本操作(二)
    测试人员的工作开展方式
    产品管理基础知识
    项目经理与职能经理的区别
    python 面向对象(二)
    Python 常用方法和模块的使用(time & datetime & os &random &sys &shutil)-(六)
    python基本案例实现
    JAVA基础——集合浅析
  • 原文地址:https://www.cnblogs.com/markhe/p/5587927.html
Copyright © 2011-2022 走看看