跳到主要内容

Redis 命令速查

String​

按数据结构分组,每条给出作用和一个可直接照抄的示例;示例 key 按「业务:对象:标识」的习惯写,实际用时换成自己的命名。

命令作用示例
SET设置字符串值,可带 EX/PX/NX/XX/KEEPTTLSET user:1:name tom EX 600
GET获取值,key 不存在返回 nilGET user:1:name
MSET批量设置MSET user:1:name tom user:2:name jerry
MGET批量获取,不存在的返回 nilMGET user:1:name user:2:name
SETNX不存在才设置,返回 1/0SETNX lock:job 1
SETEX设置值并指定过期秒数SETEX token:abc 3600 xyz
INCR原子加 1,值必须是整数INCR article:1001:views
DECR原子减 1DECR 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左 / 右弹出一个,可带 countLPOP queue:mail 2
BRPOP / BLPOP阻塞弹出,超时返回 nilBRPOP 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交集存到新 keySINTERSTORE 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添加元素并指定 scoreZADD rank:score 100 user:1
ZRANGE按排名范围取,可加 WITHSCORESZRANGE 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
ZCOUNTscore 区间内的元素个数ZCOUNT rank:score 90 100
ZREMRANGEBYSCORE删除 score 区间内的元素ZREMRANGEBYSCORE rank:score 0 60
ZSCAN游标遍历元素和分数ZSCAN rank:score 0 COUNT 100

通用 key 管理​

命令作用示例
EXISTSkey 是否存在(可多个)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去掉过期时间,变成永久 keyPERSIST session:abc
RENAME重命名,target 存在会被覆盖RENAME tmp:key user:1:name
RENAMENXtarget 不存在才重命名RENAMENX tmp:key user:1:name
SCAN游标遍历 key,生产替代 KEYSSCAN 0 MATCH user:* COUNT 100
KEYS模式匹配所有 key,禁止在生产用KEYS user:*
RANDOMKEY随机返回一个 keyRANDOMKEY
DBSIZE当前库 key 总数DBSIZE
COPY复制 key(6.2+)COPY user:1 user:2 REPLACE
DUMP / RESTORE序列化 / 反序列化 keyDUMP 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 返回 nilWATCH stock:1001
UNWATCH取消监视UNWATCH
EVAL执行 Lua 脚本EVAL "return 1" 0
EVALSHA按 sha1 执行已缓存脚本EVALSHA 8f2b... 1 key 10
SCRIPT LOAD缓存脚本并返回 sha1SCRIPT 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后台生成 RDBBGSAVE
BGREWRITEAOF后台重写 AOFBGREWRITEAOF
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 收紧权限,只留给出问题的应急通道。