*Redis ACL LIST 命令
ACL LIST 返回当前所有 ACL 用户的配置规则,格式与 ACL 配置文件兼容,可直接用于备份和迁移。
*语法
ACL LIST
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 无 | — | — | 该子命令不接受额外参数 |
*返回值
- Array of Strings:每行是一个用户的 ACL 规则文本
*时间复杂度
O(N),N 为用户数量
*示例
*列出所有 ACL 用户配置
> ACL LIST
1) "user default on nopass ~* &* +@all"
2) "user appuser on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~app:* +get +set +del"
3) "user readonly on >readonlypass ~* +@read -@write"
*保存到文件(通过 redis-cli)
> ACL LIST | tee users.acl
1) "user default on nopass ~* &* +@all"
2) "user appuser on ~app:* +get +set +del"
*配合 ACL LOAD 进行配置恢复
# 备份
> ACL LIST > /etc/redis/users.acl
# 恢复(假设文件已存在且配置正确)
> ACL LOAD
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| NOPERM | 当前用户无 ACL 读取权限 | 使用有权限的用户(如 default)连接 |
*最佳实践
- 定期备份:将 ACL LIST 输出保存到版本控制,作为基础设施即代码
- 配置文件路径在
redis.conf中由aclfile指定,确保 LIST 输出与文件一致 - 修改权限前先 LIST 备份,便于回滚
- 配合 ACL SAVE 将内存中修改持久化到配置文件
*FAQ
Q1: ACL LIST 和 ACL GETUSER 有什么区别? A: LIST 返回所有用户的纯文本配置格式(适合备份),GETUSER 返回单个用户的结构化数组(适合解析和检查)。
Q2: 输出中的 #a665a459... 是什么?
A: # 前缀表示 SHA256 哈希密码,> 前缀表示明文密码(仅在配置时输入,存储时转为哈希)。
Q3: 可以直接编辑 ACL LIST 的输出然后加载吗? A: 可以。LIST 输出格式与 ACL 配置文件格式完全一致,保存为文件后可通过 ACL LOAD 加载。