Redis 笔记整理
(1)什么是 Redis?
Redis 是一个基于内存的高性能 Key-Value 数据库。其所有数据操作都在内存中完成,支持持久化,并提供丰富的数据结构,是一种 NoSQL 解决方案中广泛使用的中间件。
(2)Redis 的特点
- 基于内存,性能极高,每秒可处理十万次以上的读写请求;
- 支持丰富的数据结构(String、List、Set、ZSet、Hash);
- 可设置过期时间,支持缓存自动失效;
- 支持持久化(RDB 快照、AOF 日志);
- 提供主从复制机制,支持分布式部署;
- 单线程架构,避免了多线程的上下文切换开销;
- 缺点:容量受限于物理内存,不适合海量数据的高性能读写。
(3)Redis 支持的数据类型
String
:字符串List
:链表,可作队列/栈等Set
:集合,可去重、求交并差Sorted Set
:有序集合,适合排行榜等场景Hash
:键值对集合,适合对象存储
(4)为什么 Redis 需要把所有数据放在内存中?
为追求极致性能,Redis 将所有数据加载在内存中,实现 O(1) 的访问速度,定期通过异步方式持久化到磁盘。这样既保证了高性能,也保证了数据的可靠性。
(5)Redis 是单进程单线程的
- 利用队列技术,将并发请求转为串行处理;
- 避免加锁带来的开销,实现高性能的同时简化了并发控制。
(6)虚拟内存机制(已废弃)
- 当 value 很大时可使用 VM 节省内存;
vm-max-threads
控制访问 swap 文件的线程数量,尽量不超过 CPU 核心数;- 当前 Redis 主流版本已不再推荐使用 VM 机制,更推荐使用分布式方案。
(7)Redis 的分布式能力
- 支持主从结构(Master-Slave):
- Master 写数据,Slave 读取数据;
- 可实现读写分离,提高性能和可用性;
- 一般采用链式复制结构:Master ← Slave1 ← Slave2…
- 集群支持:
- Redis Cluster 实现自动数据分片;
- 每个分片可配置主从,提高容灾能力。
(8)读写分离模型
优点:
- 写入由 Master 处理;
- 读取由多个 Slave 提供,可线性扩展读能力;
- 主从热备,提升可用性。
缺点:
- 每个节点都保存全量数据,扩展能力有限;
- 对写密集型应用不适合。
(9)数据分片模型
- 将数据分散到多个节点,每个节点存储部分数据;
- 可通过客户端或代理层实现;
- 推荐 Redis Cluster 自带的分片机制,自动管理槽位。
(10)Redis 的回收策略(淘汰策略)
策略名 | 描述 |
---|---|
volatile-lru | 从设置过期时间的数据中淘汰最近最少使用的数据 |
volatile-ttl | 从设置过期时间的数据中淘汰快要过期的数据 |
volatile-random | 从设置过期时间的数据中随机淘汰 |
allkeys-lru | 从所有数据中淘汰最近最少使用的数据 |
allkeys-random | 从所有数据中随机淘汰 |
no-eviction | 不淘汰数据,插入失败返回错误(默认) |
Redis 的优势总结
- 内存级访问速度(类似 HashMap);
- 数据类型丰富;
- 支持原子操作事务;
- 可持久化 + 高可用 + 多种缓存失效策略。
Redis vs Memcached 对比
特性 | Redis | Memcached |
---|---|---|
数据持久化 | 支持 RDB 和 AOF | 不支持 |
数据结构 | 丰富(String、List、Set 等) | 仅支持 String |
支持数据淘汰策略 | 多种可选 | 支持 LRU |
最大 Value 大小 | 1GB | 1MB |
主从复制 | 支持 | 不支持 |
Redis 的性能问题与解决方案
- 避免 Master 写入快照(RDB):
- 会阻塞主线程,应避免在主库执行;
- AOF 日志积压问题:
- 使用
BGREWRITEAOF
重写优化; - 尽量由 Slave 执行持久化;
- 使用
- 主从复制稳定性:
- 建议主从部署在同一局域网;
- 避免在主库高压时添加从库;
- 使用链式复制结构,方便故障切换。
如何保证 Redis 存的都是热点数据?
策略:设置最大内存 + 合理的淘汰策略。
推荐淘汰策略:
allkeys-lru
:可用内存有限时淘汰最不常访问数据;- 搭配后台程序检测热点数据,把冷数据从 Redis 中移除。
Redis 的适用场景
1. 会话缓存(Session Cache)
适合登录态、用户临时数据存储。
2. 全页缓存(FPC)
用于页面静态化后的缓存,结合持久化特性,提升用户体验。
3. 消息队列
利用 List 的 LPUSH
和 RPOP
等操作,实现高性能轻量级队列系统。
4. 排行榜/计数器
使用 Sorted Set 实现排行榜,ZINCRBY 计分,ZRANGE 排名。
5. 发布/订阅
适合构建聊天系统、通知推送等 pub/sub 场景。
结语
Redis 是一个高性能、功能丰富、使用灵活的内存数据库,适合做缓存、消息队列、排行榜等场景,是现代架构中不可或缺的一部分。