文章目录
- [Redis 从入门到实战:核心知识点与架构搭建全解析](#Redis 从入门到实战:核心知识点与架构搭建全解析)
-
- [一、Redis 基础简介](#一、Redis 基础简介)
- [二、Redis 额外核心知识点(面试/实操必背)](#二、Redis 额外核心知识点(面试/实操必背))
-
- [2.1 实时通信三大方案:推送、轮询、长轮询](#2.1 实时通信三大方案:推送、轮询、长轮询)
-
- (1)通知(主动推送)
- (2)轮询(短轮询)
- [(3)长轮询(Long Polling)](#(3)长轮询(Long Polling))
- [2.2 交换机(Switch)](#2.2 交换机(Switch))
- [2.3 套接字(Socket)](#2.3 套接字(Socket))
- [2.4 C/S 与 B/S 架构](#2.4 C/S 与 B/S 架构)
- [三、Redis 虚拟机安装部署(超详细步骤)](#三、Redis 虚拟机安装部署(超详细步骤))
-
- [3.1 环境准备](#3.1 环境准备)
- [3.2 下载与安装](#3.2 下载与安装)
- [3.3 核心配置文件修改](#3.3 核心配置文件修改)
- [3.4 启动与验证](#3.4 启动与验证)
- [四、Redis 常用命令(完整详细)](#四、Redis 常用命令(完整详细))
-
- [4.1 全局通用命令](#4.1 全局通用命令)
- [4.2 字符串(String)命令](#4.2 字符串(String)命令)
- [五、Redis 五大核心数据类型(完整详解)](#五、Redis 五大核心数据类型(完整详解))
-
- [5.1 String(字符串)------ 最常用](#5.1 String(字符串)—— 最常用)
- [5.2 Hash(哈希)------ 存储对象](#5.2 Hash(哈希)—— 存储对象)
- [5.3 List(列表)------ 有序可重复](#5.3 List(列表)—— 有序可重复)
- [5.4 Set(集合)------ 无序不重复](#5.4 Set(集合)—— 无序不重复)
- [5.5 ZSet(有序集合)------ 带分数排序](#5.5 ZSet(有序集合)—— 带分数排序)
- [六、Redis 扩展数据类型(完整版)](#六、Redis 扩展数据类型(完整版))
-
- [6.1 Bitmap(位图)](#6.1 Bitmap(位图))
- [6.2 HyperLogLog](#6.2 HyperLogLog)
- [6.3 Geo(地理位置)](#6.3 Geo(地理位置))
- [6.4 Stream](#6.4 Stream)
- [七、Redis 在 Python 中的使用](#七、Redis 在 Python 中的使用)
-
- [7.1 安装依赖](#7.1 安装依赖)
- [7.2 基础连接](#7.2 基础连接)
- [7.3 连接池(推荐生产使用)](#7.3 连接池(推荐生产使用))
- [八、Redis 高可用架构](#八、Redis 高可用架构)
-
- [8.1 主从复制](#8.1 主从复制)
- [8.2 负载均衡算法](#8.2 负载均衡算法)
- [8.3 哨兵模式(Sentinel)------ 高可用核心](#8.3 哨兵模式(Sentinel)—— 高可用核心)
- 九、完整总结
Redis 从入门到实战:核心知识点与架构搭建全解析
Redis 是一款基于内存、高性能的键值型 NoSQL 数据库,广泛用于缓存、分布式锁、消息队列、排行榜、LBS 服务等场景。本文从基础原理、额外核心知识点、环境部署、常用命令、数据类型、Python 实战、高可用架构全维度详细梳理,内容完整可直接用于学习、面试与博客发布。
一、Redis 基础简介
- Redis 核心架构 :对外客户端多线程,对内服务端单线程。
- 基于内存操作,读写性能极高,单机可支撑 10W+ QPS。
- 支持数据持久化(RDB + AOF)、主从复制、哨兵、集群等高可用能力。
- 默认端口:6379
- 默认数据库:16 个(0~15),默认使用 0 号库。
二、Redis 额外核心知识点(面试/实操必背)
2.1 实时通信三大方案:推送、轮询、长轮询
(1)通知(主动推送)
- 核心逻辑 :服务端有新消息时,主动把数据推送给客户端,无需客户端反复询问。
- 常见实现:WebSocket、Server-Sent Events(SSE)
- 特点
- 实时性最好,消息到达立即推送。
- 需要保持长连接,服务端维护连接状态。
- 占用连接资源较高。
- 适用场景:在线聊天、系统实时通知、弹幕、股票行情。
(2)轮询(短轮询)
- 核心逻辑 :客户端每隔固定时间主动发 HTTP 请求询问服务端是否有新数据。
- 执行流程
- 客户端发送请求
- 服务端立即返回(有数据则返回,无数据返回空)
- 客户端等待间隔时间,再次发起请求
- 特点
- 实现最简单,纯 HTTP 即可完成。
- 实时性差,延迟由轮询间隔决定。
- 无效请求极多,服务端压力大。
- 适用场景:对实时性要求低、需要快速上线的简单页面。
(3)长轮询(Long Polling)
- 核心逻辑 :客户端发送请求后,服务端不立即响应,将请求挂起;直到有新消息或超时才返回,返回后客户端立即重连。
- 执行流程
- 客户端请求 → 服务端挂起请求(hold 住)
- 有新消息 / 请求超时 → 服务端返回数据
- 客户端收到响应后立刻重新发起请求
- 特点
- 实时性接近主动推送。
- 基于标准 HTTP,兼容性比 WebSocket 更好。
- 服务端需维护大量挂起连接,有一定资源开销。
- 适用场景:不支持 WebSocket 的旧浏览器、受限网络环境、内网系统。
2.2 交换机(Switch)
(1)核心定义
交换机是局域网内的数据转发设备 ,负责在同一内网中精准转发数据包,仅工作在内网,不能直接连接外网。
(2)通俗比喻
大楼里的快递分拣员:
- 多台设备(电脑、服务器、手机)通过网线连接交换机。
- 设备 A 发数据给设备 B,交换机根据 MAC 地址 直接转发给目标设备。
- 不会广播给所有设备,减少网络拥堵。
(3)核心特点
- 精准转发:维护 MAC 地址与端口映射表,只发给目标设备。
- 内网专用:无法拨号上网,不能访问外网。
- 扩展网口:提供多端口(4/8/16/24口),让多设备接入同一局域网。
2.3 套接字(Socket)
(1)一句话理解
Socket = 网络通信的端点/接口 ,是两台设备跨网络收发数据的唯一出入口。
(2)通俗比喻
两台设备互相通信:
- IP 地址 = 房子地址(定位主机)
- 端口号 = 房间门号(定位主机上的应用程序)
- Socket = 收发消息的那扇门
(3)核心组成
一个完整 Socket = IP 地址 + 端口号
无论服务端、客户端、浏览器,都必须通过 Socket 完成网络通信。
2.4 C/S 与 B/S 架构
- C/S(Client/Server) :客户端/服务器架构
- 需要安装专用客户端(如 Redis 客户端、QQ、微信)
- 性能更高,功能更强
- Redis 属于典型 C/S 架构
- B/S(Browser/Server) :浏览器/服务器架构
- 只需浏览器即可访问(如网页、后台管理系统)
- 部署维护更简单
三、Redis 虚拟机安装部署(超详细步骤)
3.1 环境准备
- 安装 C 语言编译环境
gcc(Redis 由 C 语言开发) - 永久关闭防火墙(避免外部无法连接)
bash
# 临时关闭防火墙
systemctl stop firewalld
# 永久禁用防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld
3.2 下载与安装
- 下载 Redis 稳定版(不建议最新版)
- 解压压缩包
bash
tar -zxvf redis-xxx.tar.gz
- 进入目录编译安装
bash
cd redis-xxx
make && make install
- 出现
make install成功提示即安装完成。
3.3 核心配置文件修改
- 复制默认配置文件备用
bash
cp redis.conf redis.conf.bak
- 编辑
redis.conf,修改以下关键项:
- 注释
bind 127.0.0.1→ 允许所有 IP 连接 protected-mode no→ 关闭保护模式,允许外部连接daemonize yes→ 后台守护进程启动port 6379→ 默认端口,保持不变databases 16→ 默认 16 个库
3.4 启动与验证
bash
# 启动 Redis 服务(指定配置文件)
redis-server redis.conf
# 查看 Redis 进程
ps -ef | grep redis
# 连接 Redis 客户端
redis-cli -p 6379
# 测试
ping
# 返回 PONG 说明连接正常
四、Redis 常用命令(完整详细)
4.1 全局通用命令
keys *:查看所有键(生产不推荐)del key1 key2:删除指定键expire key seconds:设置键过期时间ttl key:查看键剩余存活时间type key:查看键的数据类型
4.2 字符串(String)命令
set key value:设置键值(存在则覆盖)setnx key value:仅键不存在时设置(用于分布式锁)get key:获取值mset k1 v1 k2 v2:批量设置mget k1 k2:批量获取incr key:值自增 +1(原子操作)decr key:值自减 -1incrby key n:增加指定数值decrby key n:减少指定数值
五、Redis 五大核心数据类型(完整详解)
5.1 String(字符串)------ 最常用
- 结构:简单 key-value
- 可存内容:数字、字符串、JSON 串、二进制
- 核心命令 :
set/get/incr/expire - 使用场景:缓存、分布式锁、计数器、Session、验证码
5.2 Hash(哈希)------ 存储对象
- 结构:key → {field1:value1, field2:value2}
- 特点:适合存储结构化对象
- 核心命令 :
hset/hget/hgetall/hkeys/hvals - 场景:用户信息、商品详情、配置信息
5.3 List(列表)------ 有序可重复
- 结构:有序、可重复、双向链表
- 操作:支持左右两边插入/弹出
- 核心命令 :
lpush/rpush/lpop/rpop/lrange - 场景:消息队列、朋友圈时间线、任务队列
5.4 Set(集合)------ 无序不重复
- 结构:无序、自动去重
- 核心命令 :
sadd/smembers/sismember/sinter/sunion - 场景:点赞、收藏、共同好友、随机抽奖、去重
5.5 ZSet(有序集合)------ 带分数排序
- 结构 :每个元素带
score分数,按分数自动排序 - 特点:不重复、有序
- 核心命令 :
zadd/zrange/zrevrange/zrank - 场景:排行榜、热度排序、延时队列、优先级队列
六、Redis 扩展数据类型(完整版)
6.1 Bitmap(位图)
- 用二进制 bit 位存储状态(0/1)
- 极省内存:1 亿数据仅占约 12MB
- 场景:用户签到、打卡、状态标记、布隆过滤器
6.2 HyperLogLog
- 仅用于海量数据去重计数
- 固定内存 12KB,可统计 2^64 数据
- 标准误差 0.81%
- 场景:网站 UV、独立访客、日活统计
6.3 Geo(地理位置)
- 存储经纬度,计算距离,查找附近位置
- 底层:ZSet + Geohash
- 场景:附近门店、附近人、网约车、外卖配送
6.4 Stream
- Redis 官方原生消息队列
- 支持消息持久化、消费组、回溯消费
- 场景:日志采集、消息推送、异步任务队列
七、Redis 在 Python 中的使用
7.1 安装依赖
bash
pip install redis
7.2 基础连接
python
import redis
# 连接 Redis
r = redis.Redis(
host="192.168.x.x",
port=6379,
decode_responses=True # 自动解码为字符串
)
r.set("name", "张三")
print(r.get("name"))
7.3 连接池(推荐生产使用)
python
import redis
# 创建连接池
pool = redis.ConnectionPool(
host="192.168.x.x",
port=6379,
decode_responses=True,
max_connections=20
)
# 从连接池获取连接
r = redis.Redis(connection_pool=pool)
# Hash 示例
r.hset("user:100", mapping={"name":"李四","age":22})
print(r.hgetall("user:100"))
八、Redis 高可用架构
8.1 主从复制
(1)核心作用
- 数据备份
- 读写分离(主写从读)
- 分担读请求压力
(2)角色规则
- Master(主节点):可读可写
- Slave(从节点) :只读不可写,自动同步主库数据
(3)主从复制搭建流程图
#mermaid-svg-hs7FEQuXsa9uqy67{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hs7FEQuXsa9uqy67 .error-icon{fill:#552222;}#mermaid-svg-hs7FEQuXsa9uqy67 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hs7FEQuXsa9uqy67 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hs7FEQuXsa9uqy67 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hs7FEQuXsa9uqy67 .marker.cross{stroke:#333333;}#mermaid-svg-hs7FEQuXsa9uqy67 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hs7FEQuXsa9uqy67 p{margin:0;}#mermaid-svg-hs7FEQuXsa9uqy67 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster-label text{fill:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster-label span{color:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster-label span p{background-color:transparent;}#mermaid-svg-hs7FEQuXsa9uqy67 .label text,#mermaid-svg-hs7FEQuXsa9uqy67 span{fill:#333;color:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 .node rect,#mermaid-svg-hs7FEQuXsa9uqy67 .node circle,#mermaid-svg-hs7FEQuXsa9uqy67 .node ellipse,#mermaid-svg-hs7FEQuXsa9uqy67 .node polygon,#mermaid-svg-hs7FEQuXsa9uqy67 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hs7FEQuXsa9uqy67 .rough-node .label text,#mermaid-svg-hs7FEQuXsa9uqy67 .node .label text,#mermaid-svg-hs7FEQuXsa9uqy67 .image-shape .label,#mermaid-svg-hs7FEQuXsa9uqy67 .icon-shape .label{text-anchor:middle;}#mermaid-svg-hs7FEQuXsa9uqy67 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hs7FEQuXsa9uqy67 .rough-node .label,#mermaid-svg-hs7FEQuXsa9uqy67 .node .label,#mermaid-svg-hs7FEQuXsa9uqy67 .image-shape .label,#mermaid-svg-hs7FEQuXsa9uqy67 .icon-shape .label{text-align:center;}#mermaid-svg-hs7FEQuXsa9uqy67 .node.clickable{cursor:pointer;}#mermaid-svg-hs7FEQuXsa9uqy67 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hs7FEQuXsa9uqy67 .arrowheadPath{fill:#333333;}#mermaid-svg-hs7FEQuXsa9uqy67 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hs7FEQuXsa9uqy67 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hs7FEQuXsa9uqy67 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hs7FEQuXsa9uqy67 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hs7FEQuXsa9uqy67 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hs7FEQuXsa9uqy67 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster text{fill:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 .cluster span{color:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hs7FEQuXsa9uqy67 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hs7FEQuXsa9uqy67 rect.text{fill:none;stroke-width:0;}#mermaid-svg-hs7FEQuXsa9uqy67 .icon-shape,#mermaid-svg-hs7FEQuXsa9uqy67 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hs7FEQuXsa9uqy67 .icon-shape p,#mermaid-svg-hs7FEQuXsa9uqy67 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hs7FEQuXsa9uqy67 .icon-shape .label rect,#mermaid-svg-hs7FEQuXsa9uqy67 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hs7FEQuXsa9uqy67 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hs7FEQuXsa9uqy67 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hs7FEQuXsa9uqy67 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 配置主节点 redis.conf
启动主节点 redis-server
配置从节点
方式1:配置文件添加 slaveof 主IP 6379
方式2:客户端执行 slaveof 主IP 6379
启动从节点
主从全量同步数据
验证:主写数据 → 从节点可读取
8.2 负载均衡算法
- 轮询算法
- 按顺序轮流分配请求
- 实现最简单,请求均匀
- 不考虑服务器性能差异
- 随机算法
- 随机选择一台服务器
- 实现简单,流量近似均匀
- 一致性 Hash 算法
- 将服务器与请求映射到哈希环
- 增减节点仅少量缓存失效
- 通常加虚拟节点避免分配不均
8.3 哨兵模式(Sentinel)------ 高可用核心
(1)核心作用
监控主从节点状态,主节点故障时自动切换,保证服务高可用。
(2)哨兵工作完整流程(图解)
#mermaid-svg-kHcu4N3btj33k6X0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kHcu4N3btj33k6X0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kHcu4N3btj33k6X0 .error-icon{fill:#552222;}#mermaid-svg-kHcu4N3btj33k6X0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kHcu4N3btj33k6X0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kHcu4N3btj33k6X0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kHcu4N3btj33k6X0 .marker.cross{stroke:#333333;}#mermaid-svg-kHcu4N3btj33k6X0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kHcu4N3btj33k6X0 p{margin:0;}#mermaid-svg-kHcu4N3btj33k6X0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kHcu4N3btj33k6X0 .cluster-label text{fill:#333;}#mermaid-svg-kHcu4N3btj33k6X0 .cluster-label span{color:#333;}#mermaid-svg-kHcu4N3btj33k6X0 .cluster-label span p{background-color:transparent;}#mermaid-svg-kHcu4N3btj33k6X0 .label text,#mermaid-svg-kHcu4N3btj33k6X0 span{fill:#333;color:#333;}#mermaid-svg-kHcu4N3btj33k6X0 .node rect,#mermaid-svg-kHcu4N3btj33k6X0 .node circle,#mermaid-svg-kHcu4N3btj33k6X0 .node ellipse,#mermaid-svg-kHcu4N3btj33k6X0 .node polygon,#mermaid-svg-kHcu4N3btj33k6X0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kHcu4N3btj33k6X0 .rough-node .label text,#mermaid-svg-kHcu4N3btj33k6X0 .node .label text,#mermaid-svg-kHcu4N3btj33k6X0 .image-shape .label,#mermaid-svg-kHcu4N3btj33k6X0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-kHcu4N3btj33k6X0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kHcu4N3btj33k6X0 .rough-node .label,#mermaid-svg-kHcu4N3btj33k6X0 .node .label,#mermaid-svg-kHcu4N3btj33k6X0 .image-shape .label,#mermaid-svg-kHcu4N3btj33k6X0 .icon-shape .label{text-align:center;}#mermaid-svg-kHcu4N3btj33k6X0 .node.clickable{cursor:pointer;}#mermaid-svg-kHcu4N3btj33k6X0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kHcu4N3btj33k6X0 .arrowheadPath{fill:#333333;}#mermaid-svg-kHcu4N3btj33k6X0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kHcu4N3btj33k6X0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kHcu4N3btj33k6X0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kHcu4N3btj33k6X0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kHcu4N3btj33k6X0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kHcu4N3btj33k6X0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kHcu4N3btj33k6X0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kHcu4N3btj33k6X0 .cluster text{fill:#333;}#mermaid-svg-kHcu4N3btj33k6X0 .cluster span{color:#333;}#mermaid-svg-kHcu4N3btj33k6X0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kHcu4N3btj33k6X0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kHcu4N3btj33k6X0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-kHcu4N3btj33k6X0 .icon-shape,#mermaid-svg-kHcu4N3btj33k6X0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kHcu4N3btj33k6X0 .icon-shape p,#mermaid-svg-kHcu4N3btj33k6X0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kHcu4N3btj33k6X0 .icon-shape .label rect,#mermaid-svg-kHcu4N3btj33k6X0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kHcu4N3btj33k6X0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kHcu4N3btj33k6X0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kHcu4N3btj33k6X0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
是
哨兵定时 PING 主/从节点
单个哨兵判定主节点宕机?
主观下线
超过 quorum 数量哨兵同意?
客观下线
选举哨兵 Leader
执行故障转移
从从节点中选数据最新、优先级最高的节点
将该从节点升级为新主节点
其他从节点指向新主
通知客户端新主地址
(3)哨兵配置步骤
- 复制
sentinel.conf - 修改核心配置:
conf
sentinel monitor mymaster 主节点IP 6379 1
sentinel down-after-milliseconds mymaster 30000
- 启动哨兵:
bash
redis-sentinel sentinel.conf
九、完整总结
- 基础:Redis 服务端单线程、客户端多线程,高性能内存数据库。
- 通信:主动推送、短轮询、长轮询适用不同实时场景。
- 网络:交换机负责内网转发,Socket = IP + 端口。
- 部署:安装 gcc → 关闭防火墙 → 修改配置 → 后台启动。
- 数据:5 种核心类型 + 4 种扩展类型覆盖绝大多数业务。
- 客户端:Python 连接 + 连接池提升性能。
- 高可用:主从复制实现读写分离,哨兵实现自动故障切换。