Redis基础

2025/4/27

# Redis 教程

# Redis 是什么

Redis 是一个开源的高性能内存键值数据库,常用于缓存、会话存储、消息队列、排行榜、分布式锁等场景。它把数据主要放在内存中,所以读写速度很快,同时也支持把数据持久化到磁盘,避免服务重启后数据完全丢失。

Redis 的特点很明确:

  • 数据结构丰富,支持 stringhashlistsetzsetstream
  • 单线程事件循环模型,性能高,使用简单
  • 支持持久化、主从复制、哨兵、集群
  • 命令丰富,适合做高频读写的基础组件

Redis 不是关系型数据库,它更适合做“快”和“临时性强”的数据处理,不适合拿来替代 MySQL 这类主数据库。


# Redis 用法

# 安装

# 1. 使用 Docker 安装

这是最省事、最适合开发和测试的方式。

docker run -d \
  --name redis \
  -p 6379:6379 \
  redis:7 \
  redis-server --appendonly yes
1
2
3
4
5

说明:

  • -p 6379:6379:映射端口
  • --appendonly yes:开启 AOF 持久化
  • redis:7:使用 Redis 7 镜像

启动后可以进入容器测试:

docker exec -it redis redis-cli
1

# 2. Linux 安装

如果是 Ubuntu / Debian:

sudo apt update
sudo apt install redis-server
1
2

安装后检查版本:

redis-server --version
redis-cli --version
1
2

# 3. macOS 安装

使用 Homebrew:

brew install redis
1

# 4. Windows 安装

Redis 官方早期不原生支持 Windows,实际开发中一般建议:

  • 用 Docker
  • 用 WSL2 安装 Linux 版 Redis
  • 或使用第三方兼容版本,但不建议作为生产方案

# 配置

Redis 的配置文件通常是 redis.conf。常见关键配置如下。

# 1. 绑定地址

bind 127.0.0.1
1

含义:

  • 只允许本机访问
  • 如果要远程访问,要改成服务器内网 IP 或 0.0.0.0
  • 生产环境不要随便开放公网

# 2. 端口

port 6379
1

默认端口是 6379

# 3. 后台运行

daemonize yes
1

表示以守护进程方式运行。

# 4. 密码

requirepass your_password
1

设置访问密码。生产环境强烈建议配置。

连接时:

redis-cli -a your_password
1

# 5. 持久化

AOF:

appendonly yes
appendfsync everysec
1
2

说明:

  • appendonly yes:开启 AOF
  • appendfsync everysec:每秒同步一次,性能和安全性比较平衡

RDB:

save 900 1
save 300 10
save 60 10000
1
2
3

含义:

  • 900 秒内至少 1 次修改,生成快照
  • 300 秒内至少 10 次修改
  • 60 秒内至少 10000 次修改

# 6. 内存限制与淘汰策略

maxmemory 512mb
maxmemory-policy allkeys-lru
1
2

常见策略:

  • noeviction:内存满了就报错
  • allkeys-lru:从所有 key 中淘汰最少使用的
  • volatile-lru:只淘汰设置了过期时间的 key
  • allkeys-random:随机淘汰
  • volatile-ttl:优先淘汰即将过期的 key

# 启动与停止

# 1. 启动 Redis 服务

如果你是通过服务方式安装的:

sudo systemctl start redis
1

查看状态:

sudo systemctl status redis
1

# 2. 直接启动指定配置文件

redis-server /etc/redis/redis.conf
1

如果你自己修改了配置文件,这是最常用方式。

# 3. 停止 Redis

优雅停止:

redis-cli shutdown
1

如果有密码:

redis-cli -a your_password shutdown
1

或使用服务管理命令:

sudo systemctl stop redis
1

# 4. 连接 Redis

redis-cli
1

如果 Redis 不在本机:

redis-cli -h 192.168.1.10 -p 6379
1

# Redis 的优缺点

# 优点

  • 读写速度快,适合高并发场景
  • 支持多种数据结构,使用灵活
  • 支持持久化,能兼顾性能和数据安全
  • 支持主从复制、哨兵、集群,扩展性较好
  • 命令简单,开发成本低

# 缺点

  • 数据主要在内存中,内存成本高
  • 不适合存储超大规模、低频访问的长期数据
  • 复杂查询能力弱,不适合作为关系型数据库替代品
  • 如果配置不当,可能出现数据丢失
  • 集群、持久化、淘汰策略等配置需要一定运维经验

# Redis 的使用场景

# 1. 缓存

最常见用途。把热点数据放 Redis,减少数据库压力。

例如:

  • 商品详情
  • 用户信息
  • 配置项
  • 热门列表

# 2. 会话存储

登录态、Token、验证码等可以放 Redis,并设置过期时间。

# 3. 分布式锁

多个服务实例竞争同一资源时,可以用 Redis 实现锁。

例如订单防重复提交、库存扣减保护。

# 4. 排行榜

Redis 的 zset 很适合做排行榜。

例如:

  • 游戏积分榜
  • 文章热度榜
  • 用户活跃榜

# 5. 计数器与限流

例如:

  • 接口调用次数统计
  • 短信发送频率限制
  • 登录失败次数统计

# 6. 消息队列

虽然 Redis 不是专业消息队列,但可以用 liststream 做轻量消息处理。

# 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 集群的主从关系,无需手动干预。

如何工作:

  • 哨兵会持续监控主节点和从节点的健康状态。
  • 当哨兵检测到主节点宕机时,会启动故障转移过程,选举一个可用的从节点提升为新的主节点。
  • 更新配置后,其他从节点会自动重新配置为新的主节点。

# 主从模式与哨兵模式的区别

特点 主从模式 哨兵模式
主要功能 数据复制与读写分离 监控、故障转移和高可用性
故障处理 无自动故障转移 自动故障转移
结构 只有主节点和从节点 包含哨兵节点、主节点和从节点
数据一致性 数据同步,主从一致 故障转移后可能存在短暂的不一致
复杂性 简单,配置容易 复杂,需要配置哨兵节点
  • 主从模式适合数据复制和读写分离的场景,但在高可用性上存在局限性。
  • 哨兵模式提供了更全面的高可用解决方案,能够自动处理故障转移,适合对系统稳定性要求较高的应用场景。

总结:所以哨兵模式就是在主从模式的基础上加了个哨兵节点,用于自动故障转移+保证高可用性,然后主从节点还是跟主从模式一样,主节点负责所有的写操作和读操作,而从节点负责复制主节点的数据,并可以处理读操作。

上次更新: 7/2/2026