Redis快速入门基础篇
·
1. Redis 概述
1.1 定义
Redis(Remote Dictionary Server,远程字典服务器)是开源、内存型、高性能的 NoSQL 键值数据库,C 语言编写,支持多数据结构、持久化和高可用,是目前主流的缓存与中间件。
1.2 核心设计理念
- 内存优先:全内存操作,性能极致
- 单线程核心:规避锁竞争与上下文切换开销
- 简洁高效:功能精简,拒绝过度设计
1.3. 核心特性
- 超高性能:单机读写 10 万+ QPS,IO 多路复用 + 高效 RESP 协议
- 多数据结构:支持 10+ 种常用数据结构,远超普通缓存
- 持久化能力:RDB、AOF 双机制,保障数据不丢失
- 全套高可用:主从复制、哨兵、集群三种架构
- 丰富扩展功能:事务、Lua 脚本、发布订阅、消息队列
- 渐进式多线程:6.0+ 网络 IO 多线程,核心命令执行保持单线程,兼顾性能与稳定性
2. 数据类型与底层结构
2.1 常用数据类型及场景
| 数据类型 | 核心特点 | 典型场景 |
|---|---|---|
| String(字符串) | 最基础类型,支持文本、数字 | 缓存、计数器、分布式锁、限流 |
| Hash(哈希) | 键值对集合,适配对象存储 | 用户/商品信息、购物车 |
| List(列表) | 有序可重复,双向操作 | 消息队列、时间线、评论列表 |
| Set(集合) | 无序去重,支持交集/并集/差集 | 标签、共同好友、抽奖、去重统计 |
| ZSet(有序集合) | 带 score 权重排序,去重有序 | 排行榜、延迟队列、权重排序 |
| Bitmap(位图) | 位运算,极致省内存 | 用户签到、在线状态统计 |
| HyperLogLog | 概率统计,固定 12KB 内存 | UV 独立访客统计、大数据去重计数 |
| Geospatial | 地理位置计算、范围查询 | 附近的人/店铺、距离计算 |
| Stream | 持久化消息队列,支持消费组 | 异步消息、业务解耦 |
2.2 核心底层结构
- SDS:自定义动态字符串,二进制安全、O(1) 获取长度,替代 C 原生字符串
- 压缩列表 / listpack:小数据存储,内存紧凑(7.0+ listpack 解决连锁更新问题)
- 快速列表 quicklist:List 底层,链表 + 压缩列表结合,兼顾性能与内存
- 字典 hashtable:Hash / Set 底层,渐进式 rehash,避免卡顿
- 跳跃表 skiplist:ZSet 底层,O(log n) 读写,平衡性能开销
3 常用核心命令
3.1 通用键命令
EXISTS DEL UNLINK(异步删键) EXPIRE / PEXPIRE TTL / PTTL PERSIST SCAN(替代 KEYS) TYPE
3.2 五大基础类型核心命令
| 类型 | 核心命令 |
|---|---|
| String | SET / GET、INCR / DECR、SETNX、SETEX、MGET / MSET |
| Hash | HSET / HGET、HGETALL、HINCRBY、HKEYS / HVALS |
| List | LPUSH / RPUSH、LPOP / RPOP、LRANGE、LLEN、LTRIM |
| Set | SADD / SMEMBERS、SISMEMBER、SINTER / SUNION / SDIFF、SPOP |
| ZSet | ZADD、ZRANGE / ZREVRANGE、ZSCORE、ZINCRBY、ZREM |
3.3 过期删除策略
采用 惰性删除 + 定期删除 组合:
- 惰性删除:访问过期键即时删除
- 定期删除:每 100ms 随机抽检删除过期键,规避 CPU 峰值压力
4. 事务与持久化机制
4.1 Redis 事务
- 指令:
MULTI(开启)、EXEC(执行)、DISCARD(放弃)、WATCH(乐观锁) - 特性:顺序执行、无回滚、不支持原子回滚(单条失败不影响其他命令)
4.2 持久化机制
4.2.1 RDB(快照持久化)
定时异步生成内存数据快照,文件紧凑、恢复速度快。
- 优点:恢复快、文件小、性能影响低
- 缺点:可能丢失最后一次快照后的增量数据,fork 子进程可能短暂卡顿
4.2.2 AOF(日志持久化)
记录所有写操作命令,实时性高、数据安全。支持自动重写压缩文件,7.0+ 支持多分段 AOF,提升恢复效率。
同步策略:
| 策略 | 说明 |
|---|---|
always |
实时同步,最安全、最慢 |
everysec |
每秒同步一次(推荐) |
no |
系统自动同步 |
4.2.3 混合持久化(推荐)
Redis 4.0+ 支持,AOF 文件头部存储 RDB 快照,尾部追加增量命令,兼顾恢复速度和数据安全性。
[ RDB 快照数据 | AOF 增量命令 ]
5. 内存管理与淘汰策略
5.1 核心淘汰策略(内存满时触发)
| 策略 | 说明 |
|---|---|
| allkeys-lru(推荐) | 所有键淘汰最近最少使用 |
| allkeys-lfu | 所有键淘汰最少访问(4.0+,适配热点数据) |
| volatile-ttl | 过期键中淘汰最早过期的 |
| noeviction | 不淘汰,直接报错(默认) |
5.2 内存优化要点
- 优化键名长度
- 合理使用压缩结构阈值
- 关闭 THP(Transparent Huge Pages)
- 开启自动内存碎片整理
- 规避大 key / 热 key
6. 高可用架构
6.1 主从复制
一主多从,主写从读,实现数据冗余与读写分离。
- 全量复制:初始同步,BGSAVE + RDB 传输
- 增量复制:断连续传,基于 replication backlog 环形缓冲区
- 注意:存在异步复制延迟问题
6.2 哨兵模式(Sentinel)
监控主从节点,自动故障转移、节点发现。
- 主观下线(SDOWN)→ 客观下线(ODOWN)判断机制
- 基于 Raft 算法选举哨兵 leader
- 实现主节点自动切换,适配中小型集群
6.3 集群模式(Cluster)
去中心化分布式架构,将数据分为 16384 个哈希槽分片存储。
slot = CRC16(key) % 16384- 支持水平扩容、节点故障自愈
- 适配大数据量、高并发场景
核心限制:
- 不支持多数据库(仅 db0)
- 跨槽位多键操作需 Hash Tag 适配
- 跨节点事务/Lua 脚本不支持
7. 管道与发布订阅
7.1 管道(Pipeline)
批量打包多条命令一次发送,减少网络 RTT 开销,无原子性保障,适合批量读写场景。
Client → [CMD1, CMD2, CMD3] → Redis
Client ← [RES1, RES2, RES3] ← Redis
7.2 发布订阅(Pub/Sub)
消息发布与订阅解耦,支持普通订阅和模式订阅。
- 优点:实时性好,实现简单
- 缺点:消息不持久化、断线丢失数据
- 适用:实时通知、配置热更新等非可靠场景
8. Stream 消息队列
Redis 5.0+ 持久化消息队列,弥补 Pub/Sub 不可靠的缺陷。
核心能力:
| 能力 | 说明 |
|---|---|
| 消息持久化 | 消息不丢失 |
| 消费者组 | 同组消息独占消费 |
| 消息 ACK | 消费确认机制 |
| 超时重传 | XCLAIM 认领超时消息 |
| 消息回溯 | 支持重新消费历史消息 |
核心命令:XADD、XREAD、XREADGROUP、XACK、XPENDING、XCLAIM
9. 性能优化
9.1 核心优化点
| 层面 | 优化措施 |
|---|---|
| 客户端 | 使用连接池、Pipeline、批量命令,禁用 KEYS 大遍历 |
| 服务端 | 优化持久化策略、开启碎片整理、合理配置内存淘汰 |
| 业务侧 | 拆分大 key、打散热 key、规避批量过期 |
9.2 常见问题
- 大 key:引发网络卡顿、删除阻塞、主从延迟 → 需拆分优化
- 热 key:单节点压力过载 → 通过本地缓存、多副本打散解决
10. 核心使用场景和技术对比
10.1 核心使用场景
| 场景 | 实现方式 |
|---|---|
| 热点缓存 | 旁路缓存(Cache Aside),解决数据库压力 |
| 分布式锁 | SET NX PX + Lua 释放,保证原子性 |
| 接口限流 | 固定窗口 / 滑动窗口限流 |
| 排行榜系统 | ZSet 实现实时排序 |
| 签到统计 | Bitmap 极致省内存 |
| 延迟队列 | ZSet 时间戳权重实现 |
| 地理位置服务 | GEOADD / GEORADIUS 附近的人/店铺 |
| 消息队列 | Stream 实现可靠异步通信 |
缓存三大问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 缓存穿透 | 查询不存在的数据 | 布隆过滤器、缓存空值 |
| 缓存击穿 | 热点 Key 瞬间过期 | 互斥锁、逻辑过期 |
| 缓存雪崩 | 大量 Key 同时过期 | 过期时间加随机值、多级缓存、集群高可用 |
10.2 核心技术对比
| 维度 | Redis | Memcached | Etcd |
|---|---|---|---|
| 数据结构 | 丰富(10+ 种) | 仅 String | 基本 KV |
| 持久化 | RDB + AOF | 不支持 | 磁盘持久化 |
| 一致性 | 最终一致(异步) | 无 | 强一致(Raft) |
| 性能 | 极高(10 万+ QPS) | 高 | 中等(万级 QPS) |
| 高可用 | 主从/哨兵/集群 | 客户端哈希 | Raft 集群 |
| 适用场景 | 缓存、队列、排行榜 | 简单缓存 | 配置中心、服务发现 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)