需手动验证三件事:目录存在、属主匹配(如redis用户)、权限到位(属主至少rwx);用ls -ld、df -h、df -i及redis-cli info persistence等命令交叉确认,config get dir仅返回配置值,不校验实际可写性。

redis-cli CONFIG GET dir 返回路径后,怎么验证它真能写
看到 CONFIG GET dir 返回了路径,不代表 Redis 就能往里写——它只告诉你配置值,不校验可用性。必须手动确认三件事:目录存在、属主匹配、权限到位。
- 运行
redis-cli CONFIG GET dir | tail -1拿到路径(比如/var/lib/redis),再执行ls -ld /var/lib/redis;如果报No such file or directory,说明目录根本没创建 - 检查输出里的属主字段,如
drwxr-xr-x 1 root root,但 Redis 进程是以redis用户跑的,那它就无权写入;应改为chown redis:redis /var/lib/redis - 权限位不能只有
r-x,至少得是rwx(对属主);用chmod 755 /var/lib/redis即可,别上777,SELinux 或容器环境会直接拒绝
df -h 显示磁盘还有空间,但 bgsave 仍报 “No space left on device”
常见错觉:查了 / 或 /var 分区有空余,却忽略了 dir 配置可能指向独立挂载点(比如 /data/redis)。bgsave 只关心那个路径所在文件系统的实际用量。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 先执行
redis-cli CONFIG GET dir | tail -1,再套用df -h $(redis-cli CONFIG GET dir | tail -1),这才是真实落盘位置的磁盘使用率 - Docker 容器里必须进容器执行,宿主机
df看不到容器内挂载卷的用量;云数据库(如阿里云 Redis)则要查控制台“磁盘使用率”,SSH 登录无意义 - 除了空间,还要查 inode:运行
df -i $(redis-cli CONFIG GET dir | tail -1),Use%到 100% 也会导致No space left on device
CONFIG SET dir /new/path 成功了,但 dump.rdb 还在旧目录生成
CONFIG SET dir 在绝大多数生产部署中是无效的——它只在 Redis 启动时未显式配置 dir(即 redis.conf 里没写这行)且用默认值的情况下才可能生效。即使设成功,也不会迁移已有文件,更不会自动触发一次保存。
- 真正生效的方式只有两种:改
redis.conf中的dir行 + 重启;或CONFIG SET dir /new/path后立刻CONFIG REWRITE+ 重启 - 设完新
dir,必须手动触发BGSAVE或SAVE,否则不会生成新dump.rdb - 检查是否加载了别的配置文件:systemd 服务文件里可能带
--config /etc/redis/other.conf,你改的其实是另一个文件
日志里没报错,但 rdb_bgsave_in_progress 一直为 1,INFO persistence 里 rdb_last_save_time 不更新
这是典型的“静默失败”:bgsave 子进程启动了,但在写入临时文件阶段卡住或退出,Redis 主进程没收到完成信号,状态就僵在那里。不是没日志,是你没盯对地方。
- 查日志别只扫
Can't save in background,重点搜Failed to open the temp RDB file for saving或fork: Cannot allocate memory(内存不足导致 fork 失败很常见) - 运行
redis-cli INFO persistence | grep -E "(rdb_bgsave_in_progress|rdb_last_bgsave_status)",如果rdb_last_bgsave_status:err且长时间不变成ok,基本确认失败 - 别信
CONFIG GET dir的返回值就万事大吉——用ls -l $(redis-cli CONFIG GET dir | tail -1)/dump.rdb看文件是否存在、修改时间是否变化,才是硬证据
dir 目录属主是否一致。哪怕路径、磁盘、权限全对,只要属主不匹配,bgsave 就会静默失败,连错误日志都未必吐出来。










