Redis 核心原理与高可用架构实践
2026/6/11 18:35:52 网站建设 项目流程

一、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. 核心配置

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 拆分,避免慢操作

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询