# Redis 教程
# Redis 是什么
Redis 是一个开源的高性能内存键值数据库,常用于缓存、会话存储、消息队列、排行榜、分布式锁等场景。它把数据主要放在内存中,所以读写速度很快,同时也支持把数据持久化到磁盘,避免服务重启后数据完全丢失。
Redis 的特点很明确:
- 数据结构丰富,支持
string、hash、list、set、zset、stream等 - 单线程事件循环模型,性能高,使用简单
- 支持持久化、主从复制、哨兵、集群
- 命令丰富,适合做高频读写的基础组件
Redis 不是关系型数据库,它更适合做“快”和“临时性强”的数据处理,不适合拿来替代 MySQL 这类主数据库。
# Redis 用法
# 安装
# 1. 使用 Docker 安装
这是最省事、最适合开发和测试的方式。
docker run -d \
--name redis \
-p 6379:6379 \
redis:7 \
redis-server --appendonly yes
2
3
4
5
说明:
-p 6379:6379:映射端口--appendonly yes:开启 AOF 持久化redis:7:使用 Redis 7 镜像
启动后可以进入容器测试:
docker exec -it redis redis-cli
# 2. Linux 安装
如果是 Ubuntu / Debian:
sudo apt update
sudo apt install redis-server
2
安装后检查版本:
redis-server --version
redis-cli --version
2
# 3. macOS 安装
使用 Homebrew:
brew install redis
# 4. Windows 安装
Redis 官方早期不原生支持 Windows,实际开发中一般建议:
- 用 Docker
- 用 WSL2 安装 Linux 版 Redis
- 或使用第三方兼容版本,但不建议作为生产方案
# 配置
Redis 的配置文件通常是 redis.conf。常见关键配置如下。
# 1. 绑定地址
bind 127.0.0.1
含义:
- 只允许本机访问
- 如果要远程访问,要改成服务器内网 IP 或
0.0.0.0 - 生产环境不要随便开放公网
# 2. 端口
port 6379
默认端口是 6379。
# 3. 后台运行
daemonize yes
表示以守护进程方式运行。
# 4. 密码
requirepass your_password
设置访问密码。生产环境强烈建议配置。
连接时:
redis-cli -a your_password
# 5. 持久化
AOF:
appendonly yes
appendfsync everysec
2
说明:
appendonly yes:开启 AOFappendfsync everysec:每秒同步一次,性能和安全性比较平衡
RDB:
save 900 1
save 300 10
save 60 10000
2
3
含义:
- 900 秒内至少 1 次修改,生成快照
- 300 秒内至少 10 次修改
- 60 秒内至少 10000 次修改
# 6. 内存限制与淘汰策略
maxmemory 512mb
maxmemory-policy allkeys-lru
2
常见策略:
noeviction:内存满了就报错allkeys-lru:从所有 key 中淘汰最少使用的volatile-lru:只淘汰设置了过期时间的 keyallkeys-random:随机淘汰volatile-ttl:优先淘汰即将过期的 key
# 启动与停止
# 1. 启动 Redis 服务
如果你是通过服务方式安装的:
sudo systemctl start redis
查看状态:
sudo systemctl status redis
# 2. 直接启动指定配置文件
redis-server /etc/redis/redis.conf
如果你自己修改了配置文件,这是最常用方式。
# 3. 停止 Redis
优雅停止:
redis-cli shutdown
如果有密码:
redis-cli -a your_password shutdown
或使用服务管理命令:
sudo systemctl stop redis
# 4. 连接 Redis
redis-cli
如果 Redis 不在本机:
redis-cli -h 192.168.1.10 -p 6379
# Redis 的优缺点
# 优点
- 读写速度快,适合高并发场景
- 支持多种数据结构,使用灵活
- 支持持久化,能兼顾性能和数据安全
- 支持主从复制、哨兵、集群,扩展性较好
- 命令简单,开发成本低
# 缺点
- 数据主要在内存中,内存成本高
- 不适合存储超大规模、低频访问的长期数据
- 复杂查询能力弱,不适合作为关系型数据库替代品
- 如果配置不当,可能出现数据丢失
- 集群、持久化、淘汰策略等配置需要一定运维经验
# Redis 的使用场景
# 1. 缓存
最常见用途。把热点数据放 Redis,减少数据库压力。
例如:
- 商品详情
- 用户信息
- 配置项
- 热门列表
# 2. 会话存储
登录态、Token、验证码等可以放 Redis,并设置过期时间。
# 3. 分布式锁
多个服务实例竞争同一资源时,可以用 Redis 实现锁。
例如订单防重复提交、库存扣减保护。
# 4. 排行榜
Redis 的 zset 很适合做排行榜。
例如:
- 游戏积分榜
- 文章热度榜
- 用户活跃榜
# 5. 计数器与限流
例如:
- 接口调用次数统计
- 短信发送频率限制
- 登录失败次数统计
# 6. 消息队列
虽然 Redis 不是专业消息队列,但可以用 list 或 stream 做轻量消息处理。
# 7. 临时数据与过期数据
例如:
- 验证码
- 临时任务状态
- 秒杀库存标记
- 短期活动数据
# Redis 的几种模式
# 1. 单机模式
最简单的部署方式,只有一个 Redis 实例。
特点:
- 部署简单
- 适合开发和小型项目
- 没有高可用能力
- 单点故障风险高
适用场景:
- 本地开发
- 测试环境
- 小流量业务
# 2. 主从复制模式
一个主节点负责写入,一个或多个从节点负责读取。
特点:
- 读写分离
- 提高读取能力
- 主节点故障后,从节点本身不会自动接管写入
适用场景:
- 读多写少业务
- 需要数据备份
- 简单高可用基础架构
# 3. 哨兵模式
在主从复制基础上增加 Sentinel 进程,用于监控、自动故障转移和通知。
特点:
- 自动发现主节点故障
- 自动切换主节点
- 可提高可用性
- 配置和维护复杂度比单机高
适用场景:
- 生产环境需要高可用
- 可以接受一定切换时间
- 不希望手动干预主从切换
# 4. 集群模式
Redis Cluster 是官方提供的分布式方案,支持数据分片和高可用。
特点:
- 数据自动分片
- 支持水平扩展
- 容量和吞吐能力更强
- 运维复杂度最高
- 客户端需要支持集群协议
适用场景:
- 数据量大
- QPS 高
- 单机内存或性能不足
- 需要较强扩展能力
# 5. 伪集群 / 本地多实例模式
在一台机器上启动多个 Redis 实例,模拟主从、哨兵或集群。
特点:
- 适合学习和测试
- 不适合生产
- 便于验证部署脚本和客户端行为
如果你需要,我可以继续把这篇教程扩成一个 更适合发布到博客/文档站的完整版本,补上这些内容:
- Redis 常用命令示例
- Java / Spring Boot 连接 Redis 示例
- Redis key 设计规范
- 分布式锁的正确写法
- 缓存穿透、击穿、雪崩的处理方案
# Redis 的几种模式
# 主从模式
主从模式(Master-Slave)是指在 Redis 中有一个主节点(Master)和一个或多个从节点(Slave)。主节点负责所有的写操作和读操作,而从节点负责复制主节点的数据,并可以处理读操作。多个从节点可以存在于一个主节点之下,以实现负载均衡和冗余。
特点:
- 数据同步:从节点会定期从主节点获取数据快照(RDB)或增量数据(AOF),保持数据一致。
- 读写分离:可以通过将读请求分发给从节点,从而减轻主节点的压力,提高系统的读性能。
- 简单:主从模式的设置与管理相对简单,适合对高可用性要求不高的场景。
如何工作:
- 主节点的任何写操作都会同步到所有从节点。
- 从节点可以在不影响主节点的情况下处理读请求。
- 如果主节点宕机,从节点将无法自动提升为主节点。
# 哨兵模式
哨兵模式(Sentinel)是 Redis 提供的一种高可用性解决方案。哨兵不仅监控主从节点的状态,还可以在主节点宕机时自动进行故障转移(failover),并选举新的主节点。
特点:
- 高可用性:通过哨兵监控 Redis 实例,能够实现自动故障转移,确保系统的高可用性。
- 监控:哨兵会定期检查主节点和从节点的状态,能够及时发现故障。
- 通知:哨兵能够通过 API 通知客户端关于服务器状态的变化。
- 配置管理:哨兵可以动态管理 Redis 集群的主从关系,无需手动干预。
如何工作:
- 哨兵会持续监控主节点和从节点的健康状态。
- 当哨兵检测到主节点宕机时,会启动故障转移过程,选举一个可用的从节点提升为新的主节点。
- 更新配置后,其他从节点会自动重新配置为新的主节点。
# 主从模式与哨兵模式的区别
| 特点 | 主从模式 | 哨兵模式 |
|---|---|---|
| 主要功能 | 数据复制与读写分离 | 监控、故障转移和高可用性 |
| 故障处理 | 无自动故障转移 | 自动故障转移 |
| 结构 | 只有主节点和从节点 | 包含哨兵节点、主节点和从节点 |
| 数据一致性 | 数据同步,主从一致 | 故障转移后可能存在短暂的不一致 |
| 复杂性 | 简单,配置容易 | 复杂,需要配置哨兵节点 |
- 主从模式适合数据复制和读写分离的场景,但在高可用性上存在局限性。
- 哨兵模式提供了更全面的高可用解决方案,能够自动处理故障转移,适合对系统稳定性要求较高的应用场景。
总结:所以哨兵模式就是在主从模式的基础上加了个哨兵节点,用于自动故障转移+保证高可用性,然后主从节点还是跟主从模式一样,主节点负责所有的写操作和读操作,而从节点负责复制主节点的数据,并可以处理读操作。