Redis 底层原理:Cluster 集群部署与详解

在软件行业打工 7 载,担任过各种技术职位,现安心的做一枚码农,继续着自己喜欢的职位,这也是一种幸福吧;业余也有着其他爱好,个人折腾的内容:喜马拉雅频道(菊部开花结果),APP(码农神器),开源项目等。有兴趣一起进步的加我 QQ 群吧(322317736)!

伴随着用户体验的提升,对于服务器的吞吐量有了更高的要求,为了能够更快的获得相应的数据,将数据放入缓存内是必不可少的。 Redis 集群很大程度保证了高可用,数据的高速读写,负载的均衡,持久化,防止数据的丢失。 以下为本次 Chat 的内容: Redis 的使用与演进; Redis 单应用安装; Redis 的数据结构; Redis 特点、实现方式; 网络编程模型介绍; Redis 持久化策略、缓存策略; 集群的配置与部署; 集群数据存储方式(分片原理); 代码实例。 当前内容版权归码字科技所有并授权显示,盗版必究。

文章正文

Redis 简介

Redis 提供数据缓存服务,内部数据都存在内存中,所以访问速度非常快。

早期,Redis 单应用服务亦能满足企业的需求。之后,业务量的上升,单机的读写能力满足不了业务的需求,技术上实现主从服务,并读写分离,分担主 Master 的读负担。再之后,出现了哨兵集群,和现在的 Cluster 集群。

如图,首先简单介绍与了解下各阶段的服务方式:

主从模式:

主从模式

以下为哨兵模式:

enter image description here

简单介绍下哨兵模式:

  1. 哨兵本身是一个小集群,Redis 本身为一主多从。哨兵模式只提供单一节点(主节点)对外服务,当主节点出现问题时,将出现瞬断问题,在进行选举时,不能提供服务;

  2. 哨兵两两通讯,Redis 两两通讯,哨兵与 Redis 间两两通讯。哨兵与 Redis 节点间,都是通过心跳来监控状态,哨兵本身就是一个小集群;

  3. 每个哨兵监控所有主从节点。哨兵监控着 Redis 的运行状况,确定主节点以及从节点,保存清单,当主节点挂掉时,进行主节点的选举,更新服务列表;

  4. Server 首先通过哨兵(Sentinel)来确定访问那台 Redis 服务器 服务端使用 Redis 时,优先访问哨兵集群,获取可访问的 Redis 服务的 IP 和端口。

接下来为本篇 Chat 主要讲的集群模式,Cluster(Redis 3.0 新特性):

enter image description here

首先简单介绍下 Cluster 模式的集群,后续详细讲解:

  1. 集群对外统一。在使用集群时,只需要关注 Redis 各个节点的 IP 和端口,至于读写节点、主从等无需关注;

  2. 集群内部协调。主从节点在集群部署时已选举完成,除非节点挂掉,会进行重新选举。其次删除相关配置项时,也会重新选举主节点;

  3. 去中心化。本模式不再如哨兵、Codise 等,需要第三方监控。Cluster自行加入选举,完成主节点选举,以及读写访问控制。

Redis 详解

Redis 单服务的安装

基本操作,若已熟悉,可跳过此节

系统环境:CentOS 7

安装内容:

安装编译工具 yum -y install gcc
官网下载 Redis 源码,Wget 也可直接安装(Yum): Wget http://download.redis.io/releases/redis-5.0.2.tar.gz 解压 tar xzf redis-5.0.2.tar.gz 进入文件夹 cd redis-5.0.2 编译与安装 make & make install

编译完成后,在文件夹内会生成src目录,启动等脚本都在改目录内。

进入目录:cd src 启动 Redis,注意,此时都使用默认配置,后续会详细介绍配置文件:./redis-server ../redis.conf 通过命令查看是否成功:ps -ef|grep redis enter image description here 默认端口为 6379

可通过 Redis 工具连接服务,并进行设置与取值。

./redis-cli 可直接连接 Redis 服务端(此处未设置密码) set key value get key 退出:quit

Redis 存储数据结构

Redis 总的以 HashTable 存储,内部存储 5 种数据结构。(我们此次使用的 Redis 版本为 5.0.2

  1. Key-String 字符串存储;

  2. Key-List 列表存储;

  3. Key-Hash 哈希存储;

  4. Key-Set 集合存储;

  5. Key-Zset 有序集合存储。

首先来看下数据结构:

Redis数据结构

按顺序展示存储方式:

  1. 字符串存储,这个就没必要多说了,直接设置值,取值;

  2. 列表存取,可参考文章 《Redis 中 List 常用命令》。可以看做一个双端队列的值,可从左右插入值,左右弹出值。具体命令可以搜索文章使用,当然在实际项目中,使用代码操作,命令不常用,不必死记硬背(可保存在自己能快速查看的地方,便于突发情况下使用)。 如:

    LPUSH key value [value …] 左端插入 RPUSH key value [value …]

隐藏内容 支付可见
购买文章 ¥10
订阅频道首月仅需 12 元/月,预计可省 1288 元
¥10
¥10购买
订阅频道免费读
× 订阅 Java 精选频道
首次订阅 ¥ 元/月 15元/月
订阅即可免费阅读所有精选内容