dir必须指向已存在且Redis进程用户有读写执行权限的绝对路径,如/ssd/redis-data;RDB与AOF文件均存于此,需确保SSD空间充足、挂载选项优化(noatime,nodiratime),多实例须隔离目录,配置后须用redis-cli验证落地效果。

dir 配置项必须指向已存在的可写目录
Redis 启动时不会自动创建 dir 指定的路径,如果目录不存在或权限不足,RDB/AOF 写入会静默失败——你可能只在 SAVE 或后台 BGSAVE 时报错,或者 AOF 重写时直接崩溃,日志里只有一句 Failed to open the temp AOF file: Permission denied。
- 先用
mkdir -p /ssd/redis-data创建目标路径(比如 SSD 挂载点下的子目录) - 确保 Redis 进程用户(如
redis)对该目录有读、写、执行权限:chown redis:redis /ssd/redis-data && chmod 755 /ssd/redis-data - 检查挂载选项:SSD 分区建议用
noatime,nodiratime,避免频繁更新访问时间戳拖慢持久化写入
RDB 和 AOF 文件都受 dir 控制,但文件名和触发逻辑不同
dir 只指定父目录,具体文件名由配置项决定:dbfilename 控制 RDB 名(默认 dump.rdb),appendfilename 控制 AOF 名(默认 appendonly.aof)。两者都会落在同一 dir 下,不能分开存放。
- 若同时开启 RDB + AOF,务必确认 SSD 空间足够——AOF 在高写入场景下可能比 RDB 大数倍
- AOF 重写生成的临时文件(如
temp-rewriteaof-bg-123.aof)也写在dir下,需预留至少 1.5 倍当前 AOF 文件大小的空间 - 不要把
dir设为/tmp或系统盘路径,即使只是临时测试——AOF 日志累积后容易撑爆根分区
SSD 分区挂载后,Redis 配置里的 dir 路径必须是绝对路径
相对路径(如 ./data 或 data)会被解析为 Redis 启动时的工作目录,极大概率不是你期望的 SSD 路径,且不同启动方式(systemd / 手动 / 容器)工作目录不一致,行为不可控。
- 在
redis.conf中明确写死绝对路径:dir /ssd/redis-data - 用
redis-cli CONFIG GET dir启动后实时验证,别只信配置文件内容 - systemd 用户注意:如果用了
WorkingDirectory,它不影响dir解析,但可能干扰日志路径或requirepass文件读取,保持dir绝对化最稳妥
多个 Redis 实例共用一块 SSD 时,dir 必须隔离
同一块 SSD 上跑多个实例(比如分片或哨兵节点),若共用一个 dir,RDB/AOF 文件名冲突会导致覆盖或加载错误——dump.rdb 被实例 B 的 SAVE 覆盖后,实例 A 重启就加载到错误数据。
- 每个实例的
dir应带实例标识:/ssd/redis-data/6379、/ssd/redis-data/6380 - 避免用符号链接绕过隔离(如
dir /ssd/redis-data → /ssd/inst1),Redis 不解析 symlink 目标做权限校验,仍可能出问题 - SSD 的 IOPS 并非无限,6 个以上实例持续 BGREWRITEAOF 可能引发延迟毛刺,监控
latency doctor输出比调优单个dir更关键
redis-cli INFO persistence 里确认 rdb_last_bgsave_status:ok 和 aof_enabled:1 同时成立,再手动生成一次 RDB(redis-cli SAVE)并检查 /ssd/redis-data/dump.rdb 时间戳是否更新——这才是真正落地的验证。


















