Redis 作为高性能内存数据库,在后端开发中占据重要地位,无论是缓存、分布式锁还是消息队列,都离不开对其核心配置、持久化、事务、发布订阅以及数据淘汰策略的掌握。本文将从redis.conf配置文件入手,逐步解析 Redis 持久化、事务、发布订阅、数据删除与淘汰策略,覆盖面试高频考点与生产实战要点。
一、redis.conf 核心配置详解
Redis 配置文件默认名为redis.conf(Windows 系统为redis.windows.conf),存放于安装目录下,所有核心行为均可通过此文件配置。
1. units 单位配置
配置文件开头定义了基础度量单位,仅支持 bytes,不支持 bit ,且对大小写不敏感,BYTES/Bytes/bytes效果完全一致。

2. INCLUDES 包含配置
支持通过include指令引入其他.conf配置文件,实现配置拆分与复用,便于多实例统一管理。

3. NETWORK 网络配置
网络配置直接决定 Redis 的访问权限与连接特性,是生产环境安全配置的核心:
bind 0.0.0.0:绑定服务器所有 IP,允许外部设备访问 Redis;- 保护模式:默认开启,限制外部访问;
port 6379:Redis 默认监听端口,可自定义修改;- 超时配置:客户端闲置指定时长后关闭连接,设为 0 则关闭此功能。

4. 日志配置
日志级别与输出路径直接影响问题排查效率,核心配置如下:
loglevel notice
logfile ""
databases 16
always-show-logo yes
- 日志级别:
debug(开发调试)、verbose(详细信息)、notice(生产推荐)、warning(仅关键错误); logfile:指定日志文件路径,空则输出到控制台;databases 16:默认数据库数量为 16;always-show-logo:是否始终显示 Redis 启动 LOGO。
5. 持久化规则配置
Redis 基于内存存储,断电即失,持久化可将内存数据落地磁盘,默认触发规则:
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dir ./
save 时间 次数:规定时间内触发指定次数修改则持久化;stop-writes-on-bgsave-error:持久化出错是否停止写入;rdbcompression:是否压缩 RDB 文件;rdbchecksum:开启 RDB 文件校验;dir:持久化文件保存目录。
6. SECURITY 安全配置
默认无密码,可通过requirepass设置 Redis 连接密码,提升安全性。

7. CLIENTS 客户端限制
控制 Redis 最大连接数与内存上限,避免资源耗尽:
maxclients 10000
maxmemory <bytes>
maxmemory-policy noeviction
maxclients:最大客户端连接数,超限则拒绝新连接;maxmemory:Redis 最大可用内存;maxmemory-policy:内存达上限后的淘汰策略。
8. AOF 配置
AOF 持久化核心配置,默认关闭:
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
appendonly:是否开启 AOF;appendfilename:AOF 文件名;appendfsync:同步策略,分always(每次修改同步)、everysec(每秒同步)、no(系统自动同步)。
9. 配置修改方式
-
文件修改 :直接编辑
redis.conf,重启后生效; -
命令修改 :运行时动态调整,重启失效
# 获取配置 CONFIG GET loglevel # 修改配置 CONFIG SET loglevel "notice"
二、Redis 持久化机制
持久化是 Redis 数据安全的核心,避免内存数据因宕机丢失,提供RDB 和AOF两种方案,可单独或混合使用。
1. 持久化简介
Redis 是内存数据库,数据默认存于内存,持久化即把内存数据写入磁盘。重启时通过持久化文件恢复数据,混合持久化下优先使用 AOF 恢复,因其数据完整性更高。

2. RDB 持久化
概念
RDB(Redis DataBase)即快照持久化,指定时间间隔内将内存数据集生成快照(dump.rdb),恢复时直接加载快照文件。
工作原理
- Redis 通过
fork创建子进程,父进程继续处理客户端请求; - 子进程遍历内存数据,序列化写入临时 RDB 文件;
- 利用 Linux COW(写时复制) 机制,父进程修改数据时复制内存页,不影响子进程快照;
- 完成后替换旧 RDB 文件,子进程退出。

触发机制
- 满足
save配置规则自动触发; - 执行
flushall清空数据库触发; - 正常退出 Redis 自动生成。
优缺点
- 优点:适合大规模数据恢复,恢复速度快,对性能影响小;
- 缺点:宕机易丢失最后一次快照后的数据,fork 子进程占用内存。
3. AOF 持久化
概念
AOF(Append Only File)以日志形式记录所有写命令,重启时回放命令重建数据,默认关闭。
工作原理
- 父进程接收写命令,追加到 AOF 缓冲区;
- 子进程重写 AOF 文件,压缩日志体积;
- 重写完成后替换旧文件,保证数据连续性。

AOF 文件修复
AOF 文件损坏时,使用工具修复:
redis-check-aof --fix appendonly.aof
优缺点
- 优点:数据完整性高,每秒同步仅丢失 1 秒数据;
- 缺点:文件体积大,恢复速度慢,运行效率低于 RDB。
4. 持久化方案选择
- 追求数据安全:同时开启 RDB+AOF;
- 允许少量数据丢失、追求性能:仅用 RDB;
- 仅用 AOF 不推荐,RDB 更适合备份与快速恢复。
三、Redis 事务机制
Redis 事务与关系型数据库事务不同,单命令保证原子性,事务不保证原子性,核心是批量命令序列化执行。
1. 事务核心特性
- 本质:一组命令的集合,序列化顺序执行;
- 无隔离级别概念,命令执行前存入队列缓存;
- 单个命令失败不影响其他命令执行,不支持回滚。
2. 事务三大阶段
- 开启事务(
MULTI); - 命令入队;
- 执行事务(
EXEC)或取消事务(DISCARD)。
3. 事务操作示例
正常执行
MULTI
set k1 v1
set k2 v2
get k1
EXEC
取消事务
MULTI
set k1 v1
DISCARD
4. 事务错误类型
- 语法错误 :事务内命令存在语法问题,
EXEC后所有命令均不执行; - 逻辑错误:命令语法正确但执行失败(如对字符串自增),仅错误命令失败,其他命令正常执行。
四、Redis 发布订阅
发布订阅(pub/sub)是 Redis 的消息通信模式,实现生产者与消费者解耦,类似公众号关注机制。
1. 核心原理
Redis 服务器维护频道字典,键为频道名,值为订阅客户端链表。发布消息时,遍历对应频道的客户端,推送消息。
2. 核心命令
SUBSCRIBE 频道名:订阅频道;PUBLISH 频道名 消息:向频道发布消息;PSUBSCRIBE 模式:模式匹配订阅;PUBSUB channels:查看活跃频道。
3. 优缺点与应用场景
- 优点:实现简单,轻量消息通信;
- 缺点:消费者离线会丢失消息,消息积压易导致 Redis 崩溃;
- 场景:简单聊天室、消息通知,复杂场景优先使用 MQ 中间件。
五、Redis 数据删除与淘汰策略
Redis 内存资源有限,需通过删除策略清理过期数据,淘汰策略释放内存空间。
1. 数据过期状态
通过TTL指令查看数据状态:
- 正数:剩余存活时间;
- -1:永久有效;
- -2:已过期 / 未定义。
2. 过期数据删除策略
定时删除
- 原理:过期立即删除,创建定时器;
- 优点:节约内存;
- 缺点:CPU 占用高,影响响应性能。
惰性删除
- 原理:访问数据时判断是否过期,过期则删除;
- 优点:节省 CPU;
- 缺点:内存占用高,长期不访问的数据无法清理。
定期删除
- 原理:每秒轮询数据库,随机抽取 key 检测过期,按比例控制删除频率;
- 优点:平衡 CPU 与内存压力,可配置频率。
3. 内存淘汰策略
内存不足时,Redis 主动清理数据,分三类:
-
易失数据筛选
volatile-lru:淘汰最近最少使用的过期 key;volatile-lfu:淘汰使用次数最少的过期 key;volatile-ttl:淘汰即将过期的 key;volatile-random:随机淘汰过期 key。
-
全库数据筛选
allkeys-lru:全库淘汰最少使用 key;allkeys-lfu:全库淘汰使用次数最少 key;allkeys-random:全库随机淘汰。
-
禁止淘汰
noeviction:默认策略,禁止淘汰,写入报错引发 OOM。
策略配置
maxmemory-policy noeviction
六、总结
redis.conf是 Redis 行为核心,需掌握网络、安全、持久化关键配置;- 持久化优先混合使用,RDB 适合备份,AOF 保证数据安全;
- Redis 事务不支持原子性与回滚,仅实现批量命令序列化;
- 发布订阅适用于简单场景,复杂业务改用专业 MQ;
- 过期删除与内存淘汰需结合业务选择,避免内存溢出与数据丢失。