`

Redis 序列之四——Redis的Sharding(分片机制)

 
阅读更多

          Sharding机制:即通常所说的“分片”,允许数据存放在不同的物理机器上,以适应数据量过大的场景,克服单台机器内存或者磁盘空间的限制。而这种“离散式”地存放,对客户端来说是透明的,对客户端来讲,完全看不到这种差别。

          Redis的分片(Sharding或者Partitioning)技术:是指将数据分散到多个Redis实例中的方法,分片之后,每个redis拥有一部分原数据集的子集。在数据量非常大时,这种技术能够将数据量分散到若干主机的redis实例上,进而减轻单台redis实例的压力。分片技术能够以更易扩展的方式使用多台计算机的存储能力(这里主要指内存的存储能力)和计算能力:

          (1)从存储能力的角度,分片技术通过使用多台计算机的内存来承担更大量的数据,如果没有分片技术,那么redis的存储能力将受限于单台主机的内存大小。

          (2) 从计算能力的角度,分片技术通过将计算任务分散到多核或者多台主机中,能够充分利用多核、多台主机的计算能力。

          下面将以举例的方式说明分片技术及其存在的优势:

          示例1:未采用分片技术,有1000万条用户信息数据,以键值对:UsrID:UsrInfo的形式存储在一个redis实例中,此时所有的用户信息都会存储在一个redis实例中,对这1000万条数据的所有插、查、删、该操作压力都会集中在这个redis所在的主机上;此时所要考虑的问题不仅有存储和操作对该主机的压力,还有该主机失效时将导致所有操作都无法进行的问题。如下图1所示:

  
                               
  

             示例2:采用分片技术;有1000万条用户信息数据,以键值对:UsrID:UsrInfo的形式存储于redis中,此时有4台主机,每台主机运行一个Redis实例:主机A (Redis1)、主机B(Redis2)、主机C(Redis3)、主机D(Redis4),分片时算法为:

             redis_index = 用户的ID % 4 + 1;

             例如ID为10000654则可得到到redis_index的值:10000654 % 4 + 1 = 1,即用户10000654的信息将被放到Redis1上,所有对用户1000654的操作也将被分片到Redis1上;假如用户ID以顺序方式出现,这1000万条用户信息将被平均分配到这四台主机的各Redis实例上,如下图2所示:

 
                   
 

           采用分片之后,数据将被分散到4个redis实例中,对数据的操作也被分散到每个redis实例中,此时单台主机的压力将大大减轻。

 

           预分片技术(pre-sharding)技术:

           Redis目前不支持动态分片操作,扩容和缩容操作都会比较复杂,尤其分片操作部署在客户端时,需要重新配置和启动客户端。在使用过程中缩容用的不多,扩容可以采用预分片策略来缓解此问题。

           在正常运营环境中,一般所存储的数据会逐渐增加,可能今天只要10个redis实例就能应付,但是到了一年以后就需要50个redis实例才能支撑,因此,redis的扩容是经常用到的功能,在redis的分布式部署中,有预分片技术是非常好用的方法之一;

            预分片技术是指在开始时就启动足够多的redis实例(例如32或64个,估计一下够以后扩展用就行了),等到后续需要扩容的时候,只需要将其中一部分的redis实例转移到新增加的机子上即可,在redis实例迁移过程中使用redis的复制功能可以最大限度的降低redis的停工时间甚至可以做到没有停工时间。由于redis实例是轻量级的进程,而且占用内存较少,这里指单纯的空的redis实例,一个空的redis实例大约占用1M的内存;因此,这种方式即不会占用太多系统开销,又便于实现;

             Redis的预分片技术可以按照以下步骤进行实例迁移操作:

              (1)在新机子上启动新的redis实例;

              (2)将新redis实例作为slave将原redis实例作为master,将数据从原redis实例迁移到新redis实例上;

              (3)停止客户端(分片操作在客户端上时)或代理服务器(分片操作在代理上);

              (4)更新客户端或者代理服务器中的配置信息,去掉被迁移的原redis实例的ip和端口等信息,加上新启动redis实例的IP地址和端口;

              (5)向新启动的redis发送SLAVEOF NOONE命令,终止新redis实例对原redis实例的从属关系;

              (6)重启客户端程序或者代理程序,此时它们将会使用新的redis实例;

              (7)关掉被迁移走数据的原redis实例。

 

分享到:
评论

相关推荐

    .NET中添加Redis

    - 分片(Sharding):通过分片策略将数据分布到多个Redis实例,提高读写性能。 - 配置优化:调整Redis配置以适应特定场景,如增大缓存大小、开启持久化等。 - 使用连接池:复用连接可以减少建立和断开连接的开销...

    redis集群连接及工具类DEMO

    Redis集群采用分片(Sharding)策略来分布数据,将键空间划分为多个槽(Slots),每个节点负责一部分槽。当客户端对某个键进行操作时,会根据槽的映射规则确定操作的目标节点,从而实现负载均衡。 2. **Spring集成...

    redis和spring整合,redis集群

    1. **Redis 集群架构**: Redis 集群通过分片(Sharding)实现水平扩展,每个节点负责一部分数据。当数据量过大时,可以通过增加节点来分摊压力。 2. **配置集群**: 要配置 Redis 集群,你需要至少三个节点(推荐...

    Redis思维导图及课件

    7. **Redis Cluster**:Redis Cluster是Redis的分布式解决方案,通过分片(Sharding)技术将数据分散到多个节点上,实现水平扩展。 8. **内存管理**:了解如何设置Redis的最大内存大小,以及在内存不足时的淘汰策略...

    Spring集成redis集群

    Redis集群是Redis的一种分布式解决方案,通过数据分片(Sharding)将数据分散存储在多个节点上,以实现水平扩展。每个节点负责一部分数据,同时通过主从复制保证数据的安全性。Redis集群不支持所有数据类型的全部...

    redis design and implementation

    8. **集群**:Redis Cluster提供了分布式解决方案,通过分片(Sharding)将数据分布在多个节点上,实现水平扩展。每个节点都包含部分键的副本,确保高可用性和容错性。 9. **模块系统**:Redis模块系统允许开发人员...

    Redis-x64-3.2.100 及redis安装使用文档

    5. **Redis集群**:Redis 3.0引入了官方集群方案,通过分片(Sharding)实现数据分散,提高可扩展性。 了解以上基础知识后,你可以根据实际需求,结合Redis提供的命令和功能,进行更深入的开发和应用。记得在生产...

    Redis面试知识点.pdf

    Redis集群是一种分布式的部署方案,通过分区(sharding)和复制(replication)机制实现数据的水平扩展和高可用性。每个节点负责一部分数据,客户端请求会被重定向到正确的节点。集群中的节点间通过Gossip协议维护元...

    Redis入门指南.pdf

    - Redis Cluster是Redis的分布式解决方案,通过数据分片(Sharding)将数据分散在多个节点上,实现水平扩展。 9. **模块系统**: - Redis提供模块系统,允许扩展其功能,如Geo模块用于地理空间索引,Bloom Filter...

    redis面试题之底层实现.zip

    Redis Cluster提供了分布式存储功能,通过分片(Sharding)将数据分散在多个节点上,实现了水平扩展。每个节点都有自己的键空间,通过一致性哈希算法保证数据分布的均匀。 8. 多路复用I/O: Redis使用epoll(在...

    Redis技术参考手册.docx

    Redis的集群方案包括Redis Cluster,它通过数据分片实现数据的分布,提供水平扩展能力。然而,如果主节点全部失效,整个集群确实可能变得不可用,因此通常需要设置合适的冗余来确保高可用性。另外,Redis还支持...

    Redis学习笔记

    1. Sharding(分片)功能:通过一致性哈希算法实现客户端分片,虽然当前版本的Redis不支持在线增减节点,但它为数据提供了多样的分布选项。 2. Master/Slave复制:Redis支持主从复制模式,其中复制过程在主节点是非...

    redis学习介绍.ppt

    Redis 的特性包括速度快、持久化、数据结构、自动操作、支持多种语言、主-从复制、Sharding 等。 速度快: Redis 使用标准 C 语言编写实现,而且将所有数据加载到内存中,所以速度非常快。官方提供的数据表明,在...

    史上最全redis学习笔计

    - **Sharding**: 数据分片,提高并发处理能力。 - **High Availability**: 提供高可用性保障。 #### 五、整合Spring/Spring Boot **1. 引入依赖** - 在项目的`pom.xml`文件中引入Spring Data Redis的相关依赖。 ...

    Redis 自学专用 新手指南

    2. Cluster:分片(Sharding)技术,将数据分散在多个节点上,实现分布式存储。 七、Redis 在实际应用中的场景 1. 缓存:快速响应用户请求,减轻后端数据库压力。 2. 排行榜:利用有序集合实现动态更新的排行榜。 3...

    基于spring-sharding-mybaits集成redis缓存的游戏分布式存储框架.zip

    基于spring-sharding-mybaits集成redis缓存的游戏分布式存储框架.支持将对象序列化到队列里,异步存储。 使用spring集成mybatis3垂直和水平分库mysql.使用模版编程,采用代理模式,采集变化的字段,自动完成拼写sql,...

    GameShardingDb:基于spring-sharding-mybaits集成的redis缓存的游戏分布式存储框架。支持将对象序列化到串联里,重新存储。使用spring集成mybatis3垂直和水平分库MySQL。变化的尺度,自动完成拼写sql,降低数据库落地缺陷集成Mybatis-PageHelper分页,大数据量可以分批查询。提高查询速度

    基于spring-sharding-mybaits集成的redis缓存的游戏分布式存储框架。支持将对象序列化到串联里,反向存储。使用spring集成的mybatis3垂直和水平分库mysql。使用模版编程,采用代理模式,采集变化的细分,自动完成...

    redis集群的总结、搭建、 springboot整合测试

    1. 数据分片(Sharding):Redis集群将数据分布在多个节点上,每个节点负责一部分键的存储。数据的分布基于CRC16校验和计算得到的槽(Slot)映射,总共32768个槽。 2. 高可用性(High Availability):通过主从复制...

    redis demo

    同时,可以通过主从复制提高可用性,通过分片(Sharding)扩展存储能力。 总的来说,"redis demo"是一个学习和实践 Redis 的好起点,涵盖了基本操作和常见应用场景。通过这个项目,你可以深入理解 Redis 如何帮助...

    redis命令参考手册

    Redis Cluster提供了分布式解决方案,通过分片(Sharding)实现数据的自动均衡分布,支持多个节点间的故障转移。 7. 性能优化: - 使用合适的数据结构:根据实际需求选择最适合的数据类型,例如用Set代替List进行...

Global site tag (gtag.js) - Google Analytics