当前位置:首页 > 文章列表 > 数据库 > Redis > Redis ACL SAVE 和 ACL LOAD 怎么迁移用户权限文件

Redis ACL SAVE 和 ACL LOAD 怎么迁移用户权限文件

来源:17golang原创 2026-11-11 04:52:21 0浏览 收藏

Redis 的用户权限默认先存在运行中的服务里。如果要做容器重建、主机迁移或配置交付,不能只记住几条 ACL SETUSER 命令,而应把用户定义交给外部 ACL 文件:用 ACL SAVE 把当前权限写入文件,目标实例通过 aclfile 在启动时读取;文件修改后,再用 ACL LOAD 重新加载。

官方地址:https://redis.io/

这条流程只讨论 ACL 文件的保存、迁移、加载和重启来源,不展开命令分类授权。最容易混淆的一点是:CONFIG REWRITE 负责重写 Redis 配置,并不会自动触发 ACL SAVE。

先确定权限文件由谁负责

Redis 支持两种放置用户定义的方式:把 user ... 行直接写进 redis.conf,或者在配置中指定外部 ACL 文件。两种方式不能同时用于同一实例。用户较多、需要单独交付权限文件时,外部文件更容易纳入备份和迁移流程。

# 在配置文件中只选择一个外部 ACL 文件入口
aclfile /etc/redis/users.acl

# ACL 文件中的每一行描述一个用户及其规则
user app-reader on ~cache:* +get

文件格式与 redis.conf 中的用户定义格式相同,核心入口是 aclfile。迁移前先确认运行实例实际使用的路径、Redis 进程对文件的读写权限,以及交付系统是否会覆盖该文件。

用 ACL SAVE 保存当前用户权限

如果当前权限已经在运行中的 Redis 中配置完成,优先从运行状态生成 ACL 文件,而不是手工复制零散命令。连接具有相应管理权限的实例后执行:

# 把当前内存中的 ACL 用户配置写入 aclfile 指向的文件
redis-cli -h 127.0.0.1 -p 6379 ACL SAVE

成功时命令返回 OK。文件保存的是 Redis 当前识别到的用户规则,密码不会以明文密码形式出现在常规 ACL 列表里。生成文件后,把它作为迁移产物保存,并在交付前确认它对应的是本次变更后的状态。

运行中 Redis ACL 通过 ACL SAVE 写入外部用户权限文件并交付到目标实例的关系图
图1:ACL SAVE 迁移关系说明图,展示运行配置写入外部 ACL 文件后交付给目标实例的关系;这是静态说明图,不是截图或运行证据。

如果用户配置是在文件里手工编辑的,保存动作的方向相反:ACL SAVE 会用当前运行配置覆盖文件。因此不要把“手工改文件后执行 ACL SAVE”当成加载操作,否则手工修改可能被当前内存状态覆盖。

把 ACL 文件交付给目标实例

迁移时至少要同时交付两部分:目标实例的 redis.conf 配置入口,以及与之匹配的外部 ACL 文件。只复制 ACL 文件而忘记设置 aclfile,目标实例不会凭文件自动使用这些用户。

# 目标实例的 redis.conf 指向迁移后的权限文件
aclfile /etc/redis/users.acl

# 启动参数保持由目标环境决定,避免把源机器的私有路径写进交付物
redis-server /etc/redis/redis.conf

Redis 启动后,连接目标实例执行 ACL LIST 或 ACL GETUSER 用户名,可以检查当前内存中的用户描述是否来自这份文件。这里的检查是运行流程中的操作确认,不等于把某一台线上页面当作验证对象。

迁移时还要记住两点:

  • 外部 ACL 文件与直接写在 redis.conf 中的用户定义是二选一,不能两边都维护。
  • 文件中保存的是用户规则和密码哈希等权限数据,应像配置凭据一样控制访问范围,不要把它提交到公开代码仓库。

用 ACL LOAD 热加载修改后的文件

如果目标实例已经运行,且只是要让它读取一份人工修改或配置系统生成的 ACL 文件,可以执行:

# 重新读取 aclfile 指向的完整用户权限文件
redis-cli -h 127.0.0.1 -p 6379 ACL LOAD

关键语义是“整份文件加载”:Redis 会检查文件中的用户定义,只有整体可接受时才替换当前 ACL。若文件中任意用户定义不正确,命令返回错误,旧的 ACL 配置继续有效。这种行为让错误文件不会直接把正在使用的权限状态替换掉。

ACL LOAD 按完整文件正确或错误分别进入新配置生效与旧配置保留的边界图
图2:ACL LOAD 结果边界说明图,区分完整文件的替换路径与错误文件的旧配置保留路径;这是静态说明图,不是截图或运行证据。

因此,热加载前要先把文件作为一个完整交付物准备好;热加载后,如果返回错误,应保留错误文件以便修复,同时把“旧 ACL 仍有效”作为当前状态,而不是继续假设新规则已经生效。

不要把 CONFIG REWRITE 当成 ACL SAVE

CONFIG REWRITE 和 ACL SAVE 的持久化对象不同:

命令主要作用迁移时的含义
CONFIG REWRITE将当前配置写回 Redis 配置文件不会自动把当前 ACL 写入外部 ACL 文件
ACL SAVE将当前 ACL 用户配置写入外部 ACL 文件适合作为权限文件交付前的保存动作
ACL LOAD从外部 ACL 文件读取用户配置适合作为目标实例的热加载动作

如果一次变更同时改了 Redis 配置和 ACL 用户,应该把两个文件分别纳入发布记录,并明确先后顺序。只执行 CONFIG REWRITE 不能证明外部权限文件已同步。

迁移失败时按这个顺序处理

  1. 先确认入口。检查目标实例的 aclfile 是否指向预期文件,避免加载了另一份同名文件。
  2. 再确认文件完整。不要只复制某一行用户定义;外部 ACL 文件应作为整体交付,逐行用户语法错误都可能让 ACL LOAD 失败。
  3. 区分保存和加载。当前运行状态要写到文件用 ACL SAVE,文件内容要进入运行状态用 ACL LOAD。
  4. 保留失败版本。加载返回错误时先保留错误文件和错误信息,因为旧 ACL 仍在工作;修复后再对同一个文件执行加载。
  5. 最后处理重启。确认目标实例的启动配置仍然指向 ACL 文件,避免重启后回到没有外部文件的配置来源。
# 迁移后的最小操作顺序:先确认文件入口,再按动作选择命令
redis-cli CONFIG GET aclfile
redis-cli ACL SAVE   # 只有需要把当前运行状态写回文件时才执行
redis-cli ACL LOAD   # 只有需要读取文件内容进入当前实例时才执行

上面的三条命令不是固定的无脑脚本:如果源端刚完成用户配置,源端执行保存;如果目标端拿到新的文件,目标端执行加载。把两个方向混用,是迁移中最常见的误操作。

一张表记住 ACL 文件工作流

你要完成的事情动作注意点
把当前用户权限变成文件ACL SAVE可能覆盖外部 ACL 文件的现有内容
让目标实例启动时读取文件配置 aclfile 后启动不要同时在 redis.conf 内联维护用户
让运行中的实例读取文件ACL LOAD文件整体正确才替换,错误时旧配置保留
保存普通 Redis 配置CONFIG REWRITE不会替代 ACL SAVE

相关问题

ACL SAVE 会不会把明文密码写进文件?

ACL 文件使用用户规则和密码哈希等形式保存权限信息,不应把它当成普通文本配置公开分发。文件本身仍然需要按敏感配置控制读取和备份权限。

ACL LOAD 失败后需要立刻重启 Redis 吗?

不需要把重启当成默认修复动作。官方语义是错误文件不会替换当前 ACL,先根据返回错误修复完整文件,再重新执行 ACL LOAD 更容易保留现有服务状态。

修改 redis.conf 后执行 CONFIG REWRITE 就够了吗?

如果改动包含外部 ACL 文件中的用户权限,还不够。CONFIG REWRITE 与 ACL SAVE 管理不同文件,迁移清单中应分别记录。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis ACL LIST 怎样导出用户权限并比较两台实例差异Redis ACL LIST 怎样导出用户权限并比较两台实例差异
上一篇
Redis ACL LIST 怎样导出用户权限并比较两台实例差异
Redis ACL SETUSER 的 reset 和追加规则有什么区别
下一篇
Redis ACL SETUSER 的 reset 和追加规则有什么区别
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    976次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    981次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1096次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1068次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    906次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码