Redis 从入门到实战:核心知识点与架构搭建全解析

文章目录

  • [Redis 从入门到实战:核心知识点与架构搭建全解析](#Redis 从入门到实战:核心知识点与架构搭建全解析)
    • [一、Redis 基础简介](#一、Redis 基础简介)
    • [二、Redis 额外核心知识点(面试/实操必背)](#二、Redis 额外核心知识点(面试/实操必背))
    • [三、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 高可用架构)
    • 九、完整总结

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)
  • 特点
    1. 实时性最好,消息到达立即推送。
    2. 需要保持长连接,服务端维护连接状态。
    3. 占用连接资源较高。
  • 适用场景:在线聊天、系统实时通知、弹幕、股票行情。
(2)轮询(短轮询)
  • 核心逻辑 :客户端每隔固定时间主动发 HTTP 请求询问服务端是否有新数据。
  • 执行流程
    1. 客户端发送请求
    2. 服务端立即返回(有数据则返回,无数据返回空)
    3. 客户端等待间隔时间,再次发起请求
  • 特点
    1. 实现最简单,纯 HTTP 即可完成。
    2. 实时性差,延迟由轮询间隔决定。
    3. 无效请求极多,服务端压力大。
  • 适用场景:对实时性要求低、需要快速上线的简单页面。
(3)长轮询(Long Polling)
  • 核心逻辑 :客户端发送请求后,服务端不立即响应,将请求挂起;直到有新消息或超时才返回,返回后客户端立即重连。
  • 执行流程
    1. 客户端请求 → 服务端挂起请求(hold 住)
    2. 有新消息 / 请求超时 → 服务端返回数据
    3. 客户端收到响应后立刻重新发起请求
  • 特点
    1. 实时性接近主动推送。
    2. 基于标准 HTTP,兼容性比 WebSocket 更好。
    3. 服务端需维护大量挂起连接,有一定资源开销。
  • 适用场景:不支持 WebSocket 的旧浏览器、受限网络环境、内网系统。

2.2 交换机(Switch)

(1)核心定义

交换机是局域网内的数据转发设备 ,负责在同一内网中精准转发数据包,仅工作在内网,不能直接连接外网

(2)通俗比喻

大楼里的快递分拣员

  • 多台设备(电脑、服务器、手机)通过网线连接交换机。
  • 设备 A 发数据给设备 B,交换机根据 MAC 地址 直接转发给目标设备。
  • 不会广播给所有设备,减少网络拥堵。
(3)核心特点
  1. 精准转发:维护 MAC 地址与端口映射表,只发给目标设备。
  2. 内网专用:无法拨号上网,不能访问外网。
  3. 扩展网口:提供多端口(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 环境准备

  1. 安装 C 语言编译环境 gcc(Redis 由 C 语言开发)
  2. 永久关闭防火墙(避免外部无法连接)
bash 复制代码
# 临时关闭防火墙
systemctl stop firewalld
# 永久禁用防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld

3.2 下载与安装

  1. 下载 Redis 稳定版(不建议最新版)
  2. 解压压缩包
bash 复制代码
tar -zxvf redis-xxx.tar.gz
  1. 进入目录编译安装
bash 复制代码
cd redis-xxx
make && make install
  1. 出现 make install 成功提示即安装完成。

3.3 核心配置文件修改

  1. 复制默认配置文件备用
bash 复制代码
cp redis.conf redis.conf.bak
  1. 编辑 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:值自减 -1
  • incrby 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 负载均衡算法

  1. 轮询算法
    • 按顺序轮流分配请求
    • 实现最简单,请求均匀
    • 不考虑服务器性能差异
  2. 随机算法
    • 随机选择一台服务器
    • 实现简单,流量近似均匀
  3. 一致性 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)哨兵配置步骤
  1. 复制 sentinel.conf
  2. 修改核心配置:
conf 复制代码
sentinel monitor mymaster 主节点IP 6379 1
sentinel down-after-milliseconds mymaster 30000
  1. 启动哨兵:
bash 复制代码
redis-sentinel sentinel.conf

九、完整总结

  1. 基础:Redis 服务端单线程、客户端多线程,高性能内存数据库。
  2. 通信:主动推送、短轮询、长轮询适用不同实时场景。
  3. 网络:交换机负责内网转发,Socket = IP + 端口。
  4. 部署:安装 gcc → 关闭防火墙 → 修改配置 → 后台启动。
  5. 数据:5 种核心类型 + 4 种扩展类型覆盖绝大多数业务。
  6. 客户端:Python 连接 + 连接池提升性能。
  7. 高可用:主从复制实现读写分离,哨兵实现自动故障切换。
相关推荐
万岳科技系统开发9 小时前
私域直播系统开发从0到1:企业直播平台搭建全过程
前端·小程序·架构
我叫张小白。9 小时前
Redis常用数据结构与命令详解
数据结构·数据库·redis
SelectDB9 小时前
- 别把懂语义和查事实混为一谈:企业级 Agent 真正缺的是什么?
数据库·数据分析·agent
Lao A(zhou liang)的菜园9 小时前
深入详细解释Oracle 全量 CHECKPOINT 与增量 CHECKPOINT
数据库·oracle
数据库小学妹9 小时前
异构数据库同步实战:如何打通Oracle/MySQL/SQL Server的数据孤岛
数据库·mysql·oracle
●VON9 小时前
鸿蒙Flutter实战:MultiProvider多状态管理架构实践
flutter·华为·架构·harmonyos·鸿蒙
数据库知识分享者小北10 小时前
安全可靠数据库选型之阿里云 PolarDB MySQL 版V2.0
数据库·mysql·阿里云·国产数据库·polardb·安全可靠数据库·polardb-m
一只fish10 小时前
Oracle官方文档翻译《Database Concepts 26ai》第16章-数据库实例
数据库·oracle
我是一只码蚁10 小时前
记一次苍穹外卖项目 Maven 编译报错的排查与解决全过程
java·经验分享·笔记·后端·架构·maven