*Redis ACL CAT 命令

ACL CAT 返回 ACL 命令分类的完整列表,或返回指定分类下的所有命令。


*语法

ACL CAT [categoryname]

*参数说明

参数 类型 必填 说明
categoryname String ACL 分类名称。不提供时返回所有分类列表

*返回值

  • Array of Strings:分类列表(无参数时)或命令列表(有参数时)
  • Error:分类名称不存在

*时间复杂度

O(N),N 为分类数量或分类内命令数量


*示例

*列出所有 ACL 分类

> ACL CAT
 1) "keyspace"
 2) "read"
 3) "write"
 4) "string"
 5) "list"
 6) "set"
 7) "sortedset"
 8) "hash"
 9) "hyperloglog"
10) "geo"
11) "stream"
12) "pubsub"
13) "admin"
14) "fast"
15) "slow"
16) "blocking"
17) "dangerous"
18) "connection"
19) "transaction"
20) "scripting"

*列出 string 分类下的所有命令

> ACL CAT string
 1) "append"
 2) "bitcount"
 3) "bitfield"
 4) "bitfield_ro"
 5) "bitop"
 6) "bitpos"
 7) "decr"
 8) "decrby"
 9) "get"
10) "getbit"
11) "getdel"
12) "getex"
13) "getrange"
14) "getset"
15) "incr"
16) "incrby"
17) "incrbyfloat"
18) "mget"
19) "mset"
20) "msetnx"
21) "psetex"
22) "set"
23) "setbit"
24) "setex"
25) "setnx"
26) "setrange"
27) "strlen"

*列出 dangerous 分类(高危命令)

> ACL CAT dangerous
 1) "acl"
 2) "bgrewriteaof"
 3) "bgsave"
 4) "config"
 5) "copy"
 6) "debug"
 7) "flushall"
 8) "flushdb"
 9) "info"
10) "lastsave"
11) "latency"
12) "lolwut"
13) "migrate"
14) "module"
15) "monitor"
16) "psync"
17) "replconf"
18) "replicaof"
19) "restore"
20) "restore-asking"
21) "role"
22) "save"
23) "shutdown"
24) "slaveof"
25) "slowlog"
26) "swapdb"
27) "sync"
28) "client"
29) "cluster"
30) "command"
31) "failover"
32) "readonly"
33) "readwrite"
34) "sort"
35) "shutdown"

*常见错误

错误 原因 解决
ERR Unknown category 分类名称不存在 先用 ACL CAT 查看所有分类

*最佳实践

  • 使用 ACL CAT 来了解权限体系,按分类授权比逐个命令更高效
  • 特别注意 dangerous 分类,生产环境应限制给管理员用户
  • 配合 ACL SETUSER+@category 语法使用
  • 自定义用户时,优先授予 @read + 业务需要的分类,而非 @all

*FAQ

Q1: 分类之间是什么关系? A: 分类是正交的。一个命令可以同时属于 stringwritefast 多个分类。授权时只需满足任一分类即可。

Q2: 如何查看某个命令属于哪些分类? A: 使用 COMMAND INFO <cmd> 查看命令元数据中的 acl_categories 字段。

Q3: 可以给用户授权整个分类吗? A: 可以。ACL SETUSER myuser +@string 授予 string 分类下所有命令的执行权限。