Redis 命令速查
String
按数据结构分组,每条给出作用和一个可直接照抄的示例;示例 key 按「业务:对象:标识」的习惯写,实际用时换成自己的命名。
| 命令 | 作用 | 示例 |
|---|---|---|
SET | 设置字符串值,可带 EX/PX/NX/XX/KEEPTTL | SET user:1:name tom EX 600 |
GET | 获取值,key 不存在返回 nil | GET user:1:name |
MSET | 批量设置 | MSET user:1:name tom user:2:name jerry |
MGET | 批量获取,不存在的返回 nil | MGET user:1:name user:2:name |
SETNX | 不存在才设置,返回 1/0 | SETNX lock:job 1 |
SETEX | 设置值并指定过期秒数 | SETEX token:abc 3600 xyz |
INCR | 原子加 1,值必须是整数 | INCR article:1001:views |
DECR | 原子减 1 | DECR stock:1001 |
INCRBY | 原子加减指定整数 | INCRBY stock:1001 -2 |
APPEND | 追加内容,返回新长度 | APPEND log:1 "done" |
STRLEN | 值长度(字节) | STRLEN user:1:name |
GETSET | 取旧值并设置新值 | GETSET counter:1 0 |
GETDEL | 取值并删除(6.2+) | GETDEL token:abc |
SETBIT / GETBIT | 位图置位 / 取位 | SETBIT sign:1001 5 1 |
Hash
| 命令 | 作用 | 示例 |
|---|---|---|
HSET | 设置一个或多个字段 | HSET user:1 name tom age 20 |
HGET | 取单个字段 | HGET user:1 name |
HMGET | 取多个字段 | HMGET user:1 name age |
HGETALL | 取全部字段和值(O(N),慎用) | HGETALL user:1 |
HDEL | 删除一个或多个字段 | HDEL user:1 age |
HEXISTS | 字段是否存在 | HEXISTS user:1 name |
HLEN | 字段数量 | HLEN user:1 |
HKEYS / HVALS | 取所有字段名 / 所有值 | HKEYS user:1 |
HINCRBY | 字段原子加减整数 | HINCRBY cart:1 count 1 |
HINCRBYFLOAT | 字段原子加减浮点数 | HINCRBYFLOAT user:1 score 1.5 |
HSETNX | 字段不存在才设置 | HSETNX user:1 name tom |
HSCAN | 游标遍历字段 | HSCAN user:1 0 COUNT 100 |
List
| 命令 | 作用 | 示例 |
|---|---|---|
LPUSH / RPUSH | 左 / 右插入,可一次多个 | RPUSH queue:mail job-1 job-2 |
LPOP / RPOP | 左 / 右弹出一个,可带 count | LPOP queue:mail 2 |
BRPOP / BLPOP | 阻塞弹出,超时返回 nil | BRPOP queue:mail 5 |
LRANGE | 按索引范围取,-1 表示末尾 | LRANGE queue:mail 0 -1 |
LLEN | 列表长度 | LLEN queue:mail |
LINDEX | 按索引取单个元素 | LINDEX queue:mail 0 |
LSET | 修改指定索引的值 | LSET queue:mail 0 job-9 |
LTRIM | 只保留指定区间 | LTRIM feed:1 0 99 |
LREM | 删除指定元素,count 控制方向 | LREM queue:mail 0 job-1 |
LINSERT | 在某个元素前后插入 | LINSERT queue:mail BEFORE job-2 job-0 |
LMOVE | 从一个列表原子移动到另一个 | LMOVE queue:mail queue:done LEFT RIGHT |
LPOS | 查找元素位置(6.0.6+) | LPOS queue:mail job-2 |
Set
| 命令 | 作用 | 示例 |
|---|---|---|
SADD | 添加元素 | SADD tag:redis user:1 user:2 |
SREM | 删除元素 | SREM tag:redis user:1 |
SMEMBERS | 取全部元素(O(N),慎用) | SMEMBERS tag:redis |
SISMEMBER | 判断元素是否存在 | SISMEMBER tag:redis user:1 |
SMISMEMBER | 批量判断是否存在(6.2+) | SMISMEMBER tag:redis user:1 user:9 |
SCARD | 元素个数 | SCARD tag:redis |
SINTER | 交集 | SINTER tag:redis tag:db |
SUNION | 并集 | SUNION tag:redis tag:db |
SDIFF | 差集 | SDIFF tag:redis tag:db |
SINTERSTORE | 交集存到新 key | SINTERSTORE common:1 tag:redis tag:db |
SPOP | 随机弹出一个或多个 | SPOP lottery:pool 1 |
SRANDMEMBER | 随机取但不删除 | SRANDMEMBER lottery:pool 3 |
SSCAN | 游标遍历元素 | SSCAN tag:redis 0 COUNT 100 |
ZSet
| 命令 | 作用 | 示例 |
|---|---|---|
ZADD | 添加元素并指定 score | ZADD rank:score 100 user:1 |
ZRANGE | 按排名范围取,可加 WITHSCORES | ZRANGE rank:score 0 9 WITHSCORES |
ZREVRANGE | 按排名倒序取 | ZREVRANGE rank:score 0 9 |
ZRANGEBYSCORE | 按 score 区间取 | ZRANGEBYSCORE rank:score 90 100 |
ZREVRANGEBYSCORE | 按 score 区间倒序取 | ZREVRANGEBYSCORE rank:score 100 90 |
ZINCRBY | 分数原子增减 | ZINCRBY rank:score 5 user:1 |
ZSCORE | 查元素分数 | ZSCORE rank:score user:1 |
ZMSCORE | 批量查分数(6.2+) | ZMSCORE rank:score user:1 user:2 |
ZRANK / ZREVRANK | 正序 / 倒序排名,从 0 开始 | ZRANK rank:score user:1 |
ZREM | 删除元素 | ZREM rank:score user:1 |
ZCARD | 元素总数 | ZCARD rank:score |
ZCOUNT | score 区间内的元素个数 | ZCOUNT rank:score 90 100 |
ZREMRANGEBYSCORE | 删除 score 区间内的元素 | ZREMRANGEBYSCORE rank:score 0 60 |
ZSCAN | 游标遍历元素和分数 | ZSCAN rank:score 0 COUNT 100 |
通用 key 管理
| 命令 | 作用 | 示例 |
|---|---|---|
EXISTS | key 是否存在(可多个) | EXISTS user:1:name |
TYPE | 返回 key 的类型 | TYPE user:1:profile |
DEL | 删除 key(同步,大 key 会阻塞) | DEL user:1:name |
UNLINK | 异步删除,大 key 优先用它 | UNLINK big:hash |
TTL / PTTL | 剩余过期时间(秒 / 毫秒),-1 永久、-2 不存在 | TTL session:abc |
EXPIRE / PEXPIRE | 设置过期时间 | EXPIRE session:abc 3600 |
EXPIREAT | 指定时间戳过期 | EXPIREAT coupon:1 1767225600 |
PERSIST | 去掉过期时间,变成永久 key | PERSIST session:abc |
RENAME | 重命名,target 存在会被覆盖 | RENAME tmp:key user:1:name |
RENAMENX | target 不存在才重命名 | RENAMENX tmp:key user:1:name |
SCAN | 游标遍历 key,生产替代 KEYS | SCAN 0 MATCH user:* COUNT 100 |
KEYS | 模式匹配所有 key,禁止在生产用 | KEYS user:* |
RANDOMKEY | 随机返回一个 key | RANDOMKEY |
DBSIZE | 当前库 key 总数 | DBSIZE |
COPY | 复制 key(6.2+) | COPY user:1 user:2 REPLACE |
DUMP / RESTORE | 序列化 / 反序列化 key | DUMP user:1 |
OBJECT ENCODING | 查看底层编码 | OBJECT ENCODING user:1 |
MEMORY USAGE | 查看 key 内存占用 | MEMORY USAGE big:hash SAMPLES 0 |
TOUCH | 刷新 key 的 LRU/LFU 访问时间 | TOUCH user:1 |
SELECT | 切库(Cluster 只有 0 号库) | SELECT 1 |
事务与脚本
| 命令 | 作用 | 示例 |
|---|---|---|
MULTI | 开启事务,后续命令入队 | MULTI |
EXEC | 执行事务队列 | EXEC |
DISCARD | 放弃事务 | DISCARD |
WATCH | 监视 key,被改动则 EXEC 返回 nil | WATCH stock:1001 |
UNWATCH | 取消监视 | UNWATCH |
EVAL | 执行 Lua 脚本 | EVAL "return 1" 0 |
EVALSHA | 按 sha1 执行已缓存脚本 | EVALSHA 8f2b... 1 key 10 |
SCRIPT LOAD | 缓存脚本并返回 sha1 | SCRIPT LOAD "return 1" |
SCRIPT EXISTS | 脚本是否已缓存 | SCRIPT EXISTS 8f2b... |
SCRIPT FLUSH | 清空脚本缓存 | SCRIPT FLUSH |
连接与运维
| 命令 | 作用 | 示例 |
|---|---|---|
PING | 探活 | PING |
AUTH | 认证 | AUTH Your_Password |
INFO | 查看运行状态,可指定段 | INFO memory |
CONFIG GET | 查配置 | CONFIG GET maxmemory |
CONFIG SET | 在线改配置 | CONFIG SET maxmemory 4gb |
CONFIG REWRITE | 把运行时配置写回文件 | CONFIG REWRITE |
CLIENT LIST | 列出所有客户端连接 | CLIENT LIST |
CLIENT KILL | 踢掉指定连接 | CLIENT KILL ID 12345 |
CLIENT NO-EVICT | 让连接不受内存淘汰影响(7.0+) | CLIENT NO-EVICT ON |
SLOWLOG GET | 查看慢查询 | SLOWLOG GET 10 |
LATENCY LATEST | 查看延迟事件 | LATENCY LATEST |
LASTSAVE | 上次成功 RDB 保存的时间戳 | LASTSAVE |
BGSAVE | 后台生成 RDB | BGSAVE |
BGREWRITEAOF | 后台重写 AOF | BGREWRITEAOF |
MONITOR | 实时打印命令,排障专用 | MONITOR |
SHUTDOWN | 关停实例,NOSAVE 不保存 | SHUTDOWN SAVE |
命令行小技巧
# 携带密码并隐藏警告(密码建议走环境变量)
export REDISCLI_AUTH='Your_Password'
redis-cli -h 127.0.0.1 -p 6379 --no-auth-warning PING
# 直接执行单条命令,适合脚本
redis-cli SET demo:key hello
redis-cli GET demo:key
# 批量执行命令文件
redis-cli < commands.txt
# 扫描大 key / 内存占用
redis-cli --bigkeys
redis-cli --memkeys
# 集群模式,自动跟随 MOVED 重定向
redis-cli -c -h 10.0.0.11 -p 6379
# 压测(默认 10 万次 SET/GET)
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 50 -t set,get
记不住命令时
交互式 redis-cli 里直接输 HELP 看命令分组,HELP SET 看单条命令的用法和参数说明,比翻网页快。命令的完整参数以官方 命令参考 为准。
生产禁用清单
KEYS、FLUSHALL、FLUSHDB、MONITOR、CONFIG SET、DEBUG、SHUTDOWN 这几类命令,要么 O(N) 阻塞,要么直接改运行状态,生产环境必须通过 ACL 或 rename-command 收紧权限,只留给出问题的应急通道。