config set dir 基本无效,因 dir 是启动时加载的只读参数,执行后报 err unsupported config parameter: dir;真正生效需改 redis.conf 中的绝对路径、确保目录权限正确并重启服务。

必须改 redis.conf 并重启,CONFIG SET dir 基本无效,别白忙活。
为什么 CONFIG SET dir 大概率失败
Redis 的 dir 是启动时加载的只读参数。执行 CONFIG SET dir /new/path 会直接返回 ERR Unsupported CONFIG parameter: dir —— 这不是权限问题,是设计如此。极少数情况下(比如你压根没在 redis.conf 里写 dir 行,且 Redis 正好用默认工作目录启动),它可能成功,但:
- 新路径不会自动迁移已有 RDB/AOF 文件
- 下次重启就失效,除非你紧接着执行 CONFIG REWRITE
- 即使 CONFIG REWRITE 成功,systemd 或容器环境也可能忽略重写后的内容,仍按原始配置加载
真正生效的修改方式:改 redis.conf + 权限 + 重启
核心就三件事,缺一不可:
- 在
redis.conf里明确写死绝对路径:dir /ssd/redis-data(不能是./data或data) - 手动创建目录并赋权:
sudo mkdir -p /ssd/redis-data && sudo chown redis:redis /ssd/redis-data && sudo chmod 755 /ssd/redis-data - 重启服务:
sudo systemctl restart redis(systemd 环境)或redis-server /etc/redis/redis.conf(手动启动)
注意:dbfilename dump.rdb 和 appendfilename appendonly.aof 都是相对于 dir 的相对路径,不用改它们的值,除非你真想换文件名。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
常见静默失败原因:路径存在 ≠ 能写
即使 CONFIG GET dir 返回了新路径,RDB/AOF 仍可能继续写在旧位置,因为:
- 目录存在但 Redis 用户(如
redis)没有w或x权限 ——BGSAVE会静默失败,日志里只有Failed to open the temp RDB file - 你改的是错的
redis.conf:systemd 服务可能指定了--config /etc/redis/6379.conf,而你编辑的是/etc/redis/redis.conf - 磁盘满、或
no-appendfsync-on-rewrite yes导致 AOF 重写失败,间接让混合持久化退回到 RDB,但 RDB 写入又因权限失败
验证是否真生效?别只看 CONFIG GET dir,要三步:拼出完整路径 → 手动 SAVE → ls -l 看文件是否落在新目录且时间戳更新。
容器和多实例场景下的硬约束
Docker 中 dir 必须映射到宿主机可持久化的卷,否则容器删了数据就没了;多实例共用 SSD 时,dir 必须隔离,例如 /ssd/redis-data/6379 和 /ssd/redis-data/6380 —— 共用同一 dir 会导致 dump.rdb 被不同实例反复覆盖,重启后加载错数据。符号链接(symlink)不能绕过这个限制,Redis 不解析 symlink 目标做权限校验。










