Redis 命令全攻略(2025 最新版)
共 200+ 命令,按类型分类 + 实战场景 + 一键速查表
一、命令分类总览(10 大类)
| 分类 | 数量 | 代表命令 |
|---|---|---|
| 通用 | 15 | KEYS, EXISTS, DEL, EXPIRE |
| String | 25 | SET, GET, INCR, MGET |
| Hash | 20 | HSET, HGET, HINCRBY |
| List | 18 | LPUSH, RPOP, BLPOP |
| Set | 18 | SADD, SINTER, SRANDMEMBER |
| Sorted Set | 25 | ZADD, ZRANGE, ZINCRBY |
| 事务 | 5 | MULTI, EXEC, WATCH |
| 脚本 | 4 | EVAL, SCRIPT LOAD |
| 管理 | 30+ | INFO, CONFIG GET, SLOWLOG |
| 高级 | 40+ | XADD, PFADD, GEOADD |
二、通用命令(所有类型通用)
| 命令 | 说明 | 示例 |
|---|---|---|
KEYS pattern | 查找 key | KEYS user:* |
EXISTS key | 是否存在 | EXISTS user:1 → 1 |
DEL key [key ...] | 删除 | DEL a b c |
EXPIRE key seconds | 设置过期(秒) | EXPIRE cache:1 3600 |
TTL key | 剩余时间(秒) | TTL key → 3590 |
PERSIST key | 移除过期 | PERSIST key |
TYPE key | 返回类型 | TYPE user:1 → hash |
RENAME key newkey | 重命名 | RENAME old new |
SCAN cursor [MATCH pattern] | 渐进式遍历 | SCAN 0 MATCH user:* COUNT 100 |
警告:生产禁用
KEYS *!用SCAN
三、String 命令(最常用)
| 命令 | 说明 | 示例 |
|---|---|---|
SET key value [NX|XX] [EX seconds] | 设置 | SET name "张三" EX 3600 NX |
GET key | 获取 | GET name |
MSET k1 v1 k2 v2 | 批量设置 | MSET a 1 b 2 |
MGET k1 k2 | 批量获取 | MGET a b |
INCR key | 自增 +1 | INCR views |
INCRBY key n | 自增 n | INCRBY score 10 |
DECR / DECRBY | 自减 | DECRBY likes 5 |
APPEND key "xx" | 追加 | APPEND log "error" |
STRLEN key | 长度 | STRLEN name |
SETBIT key offset 1 | 位操作 | SETBIT sign:1 0 1 |
实战:分布式锁(SET NX PX)
SET lock:1001 "ok" NX PX 30000 # 30秒自动释放
四、Hash 命令(对象存储)
| 命令 | 说明 | 示例 |
|---|---|---|
HSET key field value | 设置字段 | HSET user:1 name "李四" |
HGET key field | 获取字段 | HGET user:1 name |
HMSET key f1 v1 f2 v2 | 批量设置(7.0 前) | → 用 HSET |
HMGET key f1 f2 | 批量获取 | HMGET user:1 name age |
HGETALL key | 获取全部 | HGETALL user:1 |
HINCRBY key field n | 字段自增 | HINCRBY user:1 age 1 |
HDEL key field | 删除字段 | HDEL user:1 temp |
HLEN key | 字段数量 | HLEN user:1 |
HKEYS key | 所有字段 | HKEYS user:1 |
HVALS key | 所有值 | HVALS user:1 |
五、List 命令(队列/栈)
| 命令 | 说明 | 示例 |
|---|---|---|
LPUSH key v1 v2 | 左插入 | LPUSH tasks "backup" |
RPUSH key v1 | 右插入 | RPUSH queue "msg" |
LPOP key | 左弹出 | LPOP tasks |
RPOP key | 右弹出 | RPOP queue |
BLPOP key timeout | 阻塞左弹出 | BLPOP tasks 0 |
BRPOP key timeout | 阻塞右弹出 | BRPOP queue 30 |
LRANGE key 0 -1 | 查看全部 | LRANGE list 0 -1 |
LLEN key | 长度 | LLEN queue |
LINDEX key 0 | 获取索引 | LINDEX list 0 |
实战:任务队列
LPUSH jobs "email" "sms"
BRPOP jobs 0 # 消费者阻塞等待
六、Set 命令(去重集合)
| 命令 | 说明 | 示例 |
|---|---|---|
SADD key m1 m2 | 添加 | SADD tags "redis" "cache" |
SMEMBERS key | 所有成员 | SMEMBERS tags |
SCARD key | 数量 | SCARD tags |
SISMEMBER key m | 是否存在 | SISMEMBER tags "redis" |
SREM key m | 删除 | SREM tags "old" |
SRANDMEMBER key [count] | 随机抽取 | SRANDMEMBER users 3 |
SPOP key | 随机弹出 | SPOP lottery |
SINTER k1 k2 | 交集 | SINTER follow:1 follow:2 |
SUNION k1 k2 | 并集 | SUNION set:a set:b |
SDIFF k1 k2 | 差集 | SDIFF a b |
实战:共同好友
SINTER friends:1001 friends:1002
七、Sorted Set 命令(排行榜)
| 命令 | 说明 | 示例 |
|---|---|---|
ZADD key score member | 添加 | ZADD rank 100 "张三" |
ZRANGE key 0 -1 WITHSCORES | 顺序查看 | ZRANGE rank 0 4 WITHSCORES |
ZREVRANGE key 0 2 | 倒序 | ZREVRANGE rank 0 2 |
ZINCRBY key n member | 加分 | ZINCRBY rank 10 "张三" |
ZSCORE key member | 获取分数 | ZSCORE rank "张三" |
ZRANK key member | 排名(从小到大) | ZRANK rank "张三" |
ZREVRANK key member | 倒排 | ZREVRANK rank "张三" |
ZREM key member | 删除 | ZREM rank "李四" |
ZCARD key | 数量 | ZCARD rank |
ZCOUNT key min max | 分数范围数量 | ZCOUNT rank 90 100 |
实战:实时排行榜
ZADD game:score 1500 "p1" 2300 "p2"
ZREVRANGE game:score 0 2 WITHSCORES
八、事务与脚本
事务(MULTI/EXEC)
MULTI
INCR views
HINCRBY user:1 score 10
EXEC
仅保证 原子执行,不保证回滚!
Lua 脚本
EVAL "return redis.call('incr', KEYS[1])" 1 counter
实战:原子扣库存
EVAL "
if redis.call('exists', KEYS[1]) == 1 then
local stock = tonumber(redis.call('get', KEYS[1]))
if stock > 0 then
redis.call('decr', KEYS[1])
return 1
end
end
return 0
" 1 stock:1001
九、管理与监控命令
| 命令 | 说明 |
|---|---|
INFO [section] | 服务器信息 |
CONFIG GET * | 获取配置 |
CONFIG SET maxmemory 2gb | 动态设置 |
SLOWLOG GET 10 | 慢查询 |
CLIENT LIST | 客户端列表 |
DBSIZE | key 数量 |
FLUSHDB | 清空当前库 |
FLUSHALL | 清空所有库 |
MONITOR | 实时命令监控 |
SAVE / BGSAVE | 手动触发 RDB |
十、高级类型命令
Bitmap
SETBIT sign:2025:1001 0 1
BITCOUNT sign:2025:1001
HyperLogLog
PFADD page:uv u1 u2 u3
PFCOUNT page:uv
Geo
GEOADD cities 116.40 39.90 "北京"
GEODIST cities 北京 上海
GEORADIUS cities 116.40 39.90 500 km
Stream
XADD logs * level error msg "DB down"
XREAD COUNT 1 STREAMS logs 0
十一、一键速查表(打印贴墙)
# 通用
KEYS * | SCAN 0 | DEL k | EXPIRE k 3600 | TTL k
# String
SET k v | GET k | INCR k | MSET a 1 b 2 | MGET a b
# Hash
HSET u f v | HGET u f | HGETALL u | HINCRBY u f 1
# List
LPUSH l v | RPOP l | BLPOP l 0 | LRANGE l 0 -1
# Set
SADD s v | SMEMBERS s | SINTER s1 s2 | SRANDMEMBER s 1
# ZSet
ZADD z 1 m | ZRANGE z 0 -1 WITHSCORES | ZINCRBY z 1 m
# 管理
INFO memory | CONFIG GET maxmemory | SLOWLOG GET 5
十二、命令性能对照(O复杂度)
| 命令 | 时间复杂度 | 建议 |
|---|---|---|
GET/SET | O(1) | 安全 |
HGET/HSET | O(1) | 推荐 |
LPUSH/RPOP | O(1) | 队列 |
ZADD/ZRANGE | O(log N) | 排行榜 |
KEYS * | O(N) | 禁用! |
SMEMBERS | O(N) | 大集合慎用 |
十三、客户端使用示例
Python (redis-py)
import redis
r = redis.Redis()
r.set('k', 'v')
r.incr('counter')
r.hset('user', 'name', '张三')
Go (go-redis)
rdb := redis.NewClient(&redis.Options{Addr: "localhost:6379"})
rdb.Set(ctx, "k", "v", 0)
rdb.ZAdd(ctx, "rank", redis.Z{Score: 100, Member: "p1"})
完成!你已掌握 Redis 所有核心命令!
# 一行验证所有类型命令
redis-cli --raw <<EOF
SET s hello
HSET h f v
LPUSH l a
SADD set x
ZADD z 1 a
PING
EOF
下一步推荐:
需要我生成:
- “秒杀系统完整 Lua 脚本”?
- “高并发排行榜 ZSET 优化方案”?
- “Stream 消费者组生产代码”?
回复关键词即可:秒杀 | 排行榜 | Stream