redis分区(分片)原理

redis相关文章

----redis原理概述
-----redis集群方案
----redis分区(分片)原理
----Redis实现分布式锁
----redis缓存穿透、雪崩和解决方案

分区的概念

  • 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集
  • 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务。解决的方法就是我们可以采用分片/分区的技术,将原来一台服务器维护的整个缓存,现在换为由多台服务器共同维护内存空间

分片的实现

说明与分析
采用在一台主机上实现分片的方式,所以只需要在该主机上配置启动三台redis的实例即可。因为redis默认使用的端口号为6379,所以这里我们分别使用6379、6380以及6381三个端口来实现
结构图
在这里插入图片描述
配置

  1. 进入到redis的安装目录下,创建一个shard文件夹,然后将redis的配置文件"redis.conf"复制一份,取名为"redis-6379.conf"(作为6379这台实例的配置文件)。然后将该文件移动到shard文件夹下,再将"redis-6379.conf"复制两份,一个叫"redis-6380.conf"(作为6380这台实例的配置文件),一个叫"redis-6381.conf"(作为6381这台实例的配置文件)
    在这里插入图片描述

  2. 修改6379这台实例的配置文件,因为端口6379默认就是redis的端口
    在这里插入图片描述

  3. 修改6380实例的配置文件,修改该实例占用的端口为6380
    在这里插入图片描述

  4. 修改pid
    在这里插入图片描述

  5. 修改dump文件名
    在这里插入图片描述

  6. 修改6381实例的配置文件,端口为6381,修改pid,修改dump文件名
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
7. 启动3台redis实例
在这里插入图片描述

Redis分区实现方案

  • 客户端分区
    是在客户端就已经决定数据会被存储到哪个redis节点或者从哪个redis节点读取。大多数客户端已经实现了客户端分区

    • 范围分区
      映射一定范围的对象到特定的Redis实例。比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推
    • hash一致算法实现分区
      hash一致算法实现分区,对key值进行hash一致性计算后得到结果,最终将数据保存到某一台redis实例中
  • 代理分区
    客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些Redis实例,然后根据Redis的响应结果返回给客户端。redis和memcached的一种代理实现就是Twemproxy

  • 查询路由(Query routing)
    是客户端随机地请求任意一个redis实例,然后由Redis将请求转发给正确的Redis节点。Redis Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的redis节点

分区的不足

  1. 分区是多台redis共同作用的,如果其中一台出现了宕机现象,则整个分片都将不能使用,虽然是在一定程度上缓减了内存的压力,但是没有实现高可用
  2. 涉及多个key的操作通常是不被支持的,当两个set映射到不同的redis实例上时,因为他们可能被存储到不同的Redis实例,你就不能对这两个set执行交集操作
  3. 涉及多个key的redis事务不能使用
  4. 分区使用的粒度是key,不能使用一个非常长的排序key存储一个数据集
  5. 当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件
  6. 分区时动态扩容或缩容可能非常复杂。Redis集群在运行时增加或者删除Redis节点,能做到最大程度对用户透明地数据再平衡,但其他一些客户端分区或者代理分区方法则不支持这种特性
  7. 高可用的解决方案:可以采用哨兵机制实现主从复制从而实现高可用

redis相关文章

----redis原理概述
-----redis集群方案
----redis分区(分片)原理
----Redis实现分布式锁
----redis缓存穿透、雪崩和解决方案

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis集群分片原理是为了解决容量问题,因为每台Redis机器的内存设置较小。通过将数据分散存储在多个节点上,可以增加整个集群的存储容量和性能。分片是根据数据的键进行的,每个键会被映射到一个特定的槽位,而每个槽位又会被分配给集群中的某个节点。这样,当客户端发送数据请求时,根据键的哈希值,可以确定数据所在的槽位,从而找到对应的节点进行数据的读取或写入操作。通过这种方式,可以实现数据在不同节点之间的分布,提高整个集群的性能和扩展性。 在Redis集群中,使用了哈希槽(hash slot)的概念来进行数据分片。集群中共有16384个哈希槽,每个槽可以存储一部分数据。当集群中新增或删除节点时,槽位会重新分配给新的节点,实现数据的平衡迁移。同时,Redis集群还使用了Gossip协议来实现节点间的信息交换和管理,保证集群的高可用性和可靠性。通过使用Redis集群分片的机制,可以实现数据的水平扩展和高性能的分布式存储。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis Cluster集群数据分片机制原理](https://download.csdn.net/download/weixin_38651165/12822944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [redis集群分片原理详解](https://blog.csdn.net/nandao158/article/details/123715287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值