Redis 核心原理与高可用架构实践

一、Redis 概述

1. 特点

  • 高性能:10万~100万+ QPS,微秒级响应
  • 丰富数据结构:String、Hash、List、Set、Sorted Set
  • 原子操作:单命令原子性,支持事务(MULTI/EXEC)
  • 持久化:RDB 快照 + AOF 日志
  • 主从复制、哨兵、集群(Cluster)高可用方案

2. 优势

  • 基于内存,C语言实现
  • 单线程模型(6.0前)+ IO多路复用(epoll)
  • 支持多种编程语言客户端
  • 功能丰富:Lua脚本、发布订阅、Pipeline、Key过期等

二、数据类型及常用命令

1. String

  • SET key value [EX seconds] [NX|XX]
  • GET key
  • INCR / DECR(原子计数器)
  • MSET / MGET(批量操作)
  • SETNX(分布式锁基础)

2. List

  • LPUSH / RPUSH(左/右插入)
  • LPOP / RPOP(左/右弹出)
  • LRANGE key start stop(范围查询)
  • BLPOP / BRPOP(阻塞式弹出)

3. Set

  • SADD key member(添加)
  • SMEMBERS key(查看全部)
  • SINTER / SUNION / SDIFF(交集/并集/差集)

4. Sorted Set(ZSet)

  • ZADD key score member(添加带分值元素)
  • ZRANGE / ZREVRANGE(按分数升/降序获取)
  • ZRANK(排名)、ZSCORE(获取分数)

5. Hash

  • HSET key field value / HGET key field
  • HMSET / HMGET(批量)
  • HGETALL(获取所有字段及值)
  • HDEL(删除字段)

三、高级特性

1. 管道(Pipeline)

  • 将多个命令打包一次发送,减少 RTT
  • 适用场景:批量操作,网络延迟高时效果显著

2. 发布/订阅(Pub/Sub)

  • SUBSCRIBE channel / PUBLISH channel message
  • PSUBSCRIBE pattern(模式订阅)
  • 消息即发即弃,无持久化

3. 事务

  • MULTI 开启,EXEC 执行,DISCARD 取消
  • 不支持回滚,但保证命令顺序执行

4. Lua 脚本

  • 原子性执行多个操作
  • EVAL script numkeys key [key ...] arg [arg ...]

四、持久化

1. RDB(快照)

  • 触发方式:save(阻塞)、bgsave(fork子进程)
  • 配置:save 900 1
  • 优点:恢复快,文件紧凑
  • 缺点:可能丢失最后一次快照后的数据

2. AOF(追加日志)

  • 记录每个写命令,重启时重放
  • 策略:always / everysec / no
  • 重写:bgrewriteaof 或自动触发(auto-aof-rewrite-percentage
  • 优点:数据更安全,最多丢1秒数据
  • 缺点:文件大,恢复慢

3. 混合持久化(RDB+AOF)

  • AOF 文件以 RDB 格式开头 + 增量命令
  • 快速恢复 + 数据安全

五、主从复制

1. 概念

  • 一个 Master 多个 Slave,数据单向同步
  • Master 可读写,Slave 只读

2. 配置

  • replicaof <master_ip> <master_port>
  • info replication 查看状态

3. 同步流程

  • Slave 发送 SYNC/PSYNC
  • Master 生成 RDB 并发送,后续增量命令持续同步

六、哨兵模式(Sentinel)

1. 作用

  • 监控主从健康,自动故障转移
  • 提供主节点地址给客户端

2. 核心配置

conf 复制代码
sentinel monitor mymaster 192.168.108.10 6379 2
sentinel down-after-milliseconds mymaster 30000

3. 故障转移流程

  1. 主观下线(SDOWN)
  2. 客观下线(ODOWN,多数哨兵确认)
  3. 选举 Leader
  4. 提升最优 Slave 为新 Master
  5. 更新其他 Slave 复制目标

七、Redis Cluster(集群)

1. 特点

  • 无中心架构,数据分片(16384 个哈希槽)
  • 每个 Master 负责一部分槽,可配 Slave
  • 自动故障转移(无需 Sentinel)

2. 数据映射

HASH_SLOT = CRC16(key) mod 16384

3. 搭建要点

  • 至少 3 主 3 从
  • 配置 cluster-enabled yes
  • 创建集群:redis-cli --cluster create <ip:port> ... --cluster-replicas 1

4. 故障转移

  • 主节点宕机,其 Slave 自动选举为新 Master
  • 集群状态变为 ok 需大部分槽可用

八、缓存典型问题

问题 定义 解决方案
雪崩 大量 Key 同时过期或 Redis 宕机 过期时间加随机值;高可用集群;限流熔断;多级缓存
穿透 查询不存在的数据(缓存+DB 都无) 缓存空值(短 TTL);布隆过滤器
击穿 热点 Key 过期,大量并发打到 DB 互斥锁;永不过期(后台异步更新)

九、常用管理命令

命令 说明
INFO [section] 查看服务器信息
CONFIG GET/SET parameter 动态修改配置(部分参数)
SLOWLOG GET/LEN/RESET 慢查询日志
KEYS pattern 查找 Key(生产慎用,阻塞)
DBSIZE 当前库 Key 数量
FLUSHDB / FLUSHALL 清空当前/所有库(建议禁用)
EXPIRE / TTL 设置/查看过期时间
SELECT dbindex 切换数据库(Cluster 不支持)

十、性能与安全建议

  • 避免使用 KEYS *,改用 SCAN 游标迭代
  • 设置 rename-command FLUSHALL "" 等禁用危险命令
  • 使用 requirepass 设置密码
  • 生产环境开启 protected-mode yes 并绑定内网 IP
  • 合理设置 maxmemory 及淘汰策略(如 allkeys-lru
  • 大 Key 拆分,避免慢操作
相关推荐
广州灵眸科技有限公司5 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大耳朵-小飞象7 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技7 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
憧憬成为web高手8 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学8 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥9 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
oradh10 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
生活爱好者!10 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
z1234567898611 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD11 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关