没有合适的资源?快使用搜索试试~ 我知道了~
学习 Redis 可以帮助你构建更快、更可靠、更可扩展的应用程序,同时也为你的职业生涯增加价值。 1.Redis 是一个高性能的键值存储系统,它可以用作数据库、缓存或消息传递系统,从而提高应用程序的响应速度和处理能力; 2.通过使用 Redis 作为缓存层,可以减少对主数据库的直接访问,减轻数据库负担,提高数据检索速度。支持多种数据结构,如字符串、哈希、列表、集合等,这使得它在处理复杂数据时更加灵活和高效。同时提供了多种持久化选项,包括 RDB 快照和 AOF 日志,确保数据的安全性和可靠性。Redis 支持主从复制、哨兵系统和集群模式,有助于构建高可用性和可扩展的分布式系统。 3.Redis 能够处理大量的并发操作,适合需要快速读写访问的大数据处理场景,Redis 支持发布/订阅模式,可以用于实现实时消息传递、通知和聊天功能 4.通过使用 Redis 减少对昂贵数据库资源的依赖,可以降低基础设施的成本
资源推荐
资源详情
资源评论
1为什么使用集群
在哨兵模式中,仍然只有一个Master节点。当并发写请求较大时,哨兵模式并不能缓解写压力。我
们知道只有主节点才具有写能力,那如果在一个集群中,能够配置多个主节点,是不是就可以缓解写压
力了呢?这个就是redis-cluster集群模式
假设我们在一台主从机器上配置了200G内存,但是业务需求是需要500G的时候,主从结构+哨兵可
以实现高可用、故障切换、冗余备份,但是并不能解决数据容量的问题,用哨兵,redis每个实例也是全
量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。
为了最大化利用内存,可以采用cluster群集,就是分布式存储。即每台redis存储不同的内容。
集群不保证数据一致性100%OK,一定会有数据丢失情况
Redis集群是一个提供在多个Redis节点间共享数据的程序集 Redis集群可以支持多个Master
Redis 分布式方案一般有以下几种:
客户端分区方案:优点是分区逻辑可控,缺点是需要自己处理数据路由、高可用、故障转移等问
题,比如在redis2.8之前通常的做法是获取某个key的hashcode,然后取余分布到不同节点,不过
这种做法无法很好的支持动态伸缩性需求,一旦节点的增或者删操作,都会导致key无法在redis中
命中
代理方案:优点是简化客户端分布式逻辑和升级维护便利,缺点是加重架构部署复杂度和性能损
耗,比如twemproxy、Codis等第三方
官方专有的集群方案:Redis Cluster,它非常优雅地解决了 Redis 集群方面的问题,部署方便简
单,因此理解应用好 Redis Cluster 将极大地解放我们使用分布式 Redis 的工作量
2Redis-cluster集群概念
Redis Cluster 是 Redis 的分布式解决方案,在3.0版本正式推出,有效地解决了 Redis 分布式方面的需
求。当遇到单机内存、并发、流量等瓶颈时,可以采用 Cluster 架构方案达到负载均衡的目的。架构图
如下
在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通
的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点,对其进行存取和其他
操作。
集群作用
Redis集群支持多个Master,每个Master又可以挂载多个Slave
由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
客户端与Redis的节点连接,不再需要连接集群中所有的节点,只需要任意连接集群中的一个可用
节点即可
槽位slot负责分配数据到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关
系
3集群节点复制
在Redis-Cluster集群中,可以给每一个主节点添加从节点,主节点和从节点直接遵循主从复制模型的特
性。
当用户需要处理更多读请求的时候,添加从节点可以扩展系统的性能。
4故障转移
Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主
节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移。
集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故
障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel。
5集群分片策略
Redis-cluster分片策略,是用来解决key存储位置的
集群将整个数据库分为16384个槽位slot,所有key-value数据都存储在这些slot中的某一个上。一个slot
槽位可以存放多个数据,key的槽位计算公式为:
slot_number=crc16(key)%16384
其中crc16为16位的循环冗余校验和函数
集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入
上线状态,并开始处理客户端发送的数据命令请求。
5.1 redis集群的槽位slot
Redis集群没有使用一致性hash 而是引入了哈希槽的概念
Redis集群有16384个哈希槽每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节
点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:
redis集群的分片
分片是
什么
使用Redis集群时我们会将存储的数据分散到多台redis机器上,这称为分片。简言
之,集群中的每个Redis实例都被认为是整个数据的一个分片。
如何找
到给定
key的
分片
为了找到给定key的分片,我们对key进行CRC16(key)算法处理并通过对总分片数量取
模。然后,使用确定性哈希函数,这意味着给定的key将多次始终映射到同一个分片,
我们可以推断将来读取特定key的位置。
5.2 分片和槽位的优势
最大优势,方便扩缩容和数据分派查找
这种结构很容易添加或者删除节点,比如如果我想添加个节点D,我需要从节点A,B,C中得部分槽位
到D上。如果我想移除节点A,需要将A中的槽移动到B和C节点上,然后将没有任何槽的节点从集群中移
除即可。由于一个结点将哈希槽移动到另一个节点不会停止服务,所以无论添加删除或者改变某个节点
的哈希槽的数量都不会造成集群不可用的状态
5.3 slot槽位映射解决方案
5.3.1哈希取余分区(小厂)
2亿条记录就是2亿个k,v,我们单机不行,必须要分布式多机,假设有3台机器构成一个集群,用户
每次读写操作都是根据公式:hash(key) % N个机器台数,计算出哈希值,用来决定数据映射到哪一个节
点上。
优点:
简单粗暴,直接有效,只需要预估好数据规划好节点,例如3台、8台、10台,就能保证一段时间的
数据支撑。使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请
求(并维护这些请求的信息),起到负载均衡+分而治之的作用。
剩余16页未读,继续阅读
资源评论
微刻时光
- 粉丝: 790
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Java与Web技术栈的简易仓储系统设计源码
- MATLAB实现CNN-GRU-Attention多输入单输出回归预测(包含详细的完整的程序和数据)
- 基于Python的YYeTsBot设计源码及跨语言实现细节解析
- 基于Java的Web学生实训考勤请假管理系设计源码
- 基于Python的HTML/CSS整合单本小说爬虫设计源码
- 西门子 博图V15洁净室温湿度串级控制结构化编程 使用串级PID的方式控制空调的回风,送风的温湿度范围,现场应用效果非常好,得到
- 机器学习 + 线性回归 + 房价预测 + 房地产投资分析
- 基于12305平台功能的Python与Shell脚本整合设计源码
- 大模型基于指令调整的大规模语言模型进行零样本密集检索的无监督文本表示学习
- -基于遗传算法的多无人机协同任务分配 - 种群中的每一个个体代表一次完整的任务分配方案,模型目标是找到代价函数的最小值,当作任务
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功