1. Redis命令体系概述
Redis作为当今最流行的内存数据库之一,其命令体系是开发者必须掌握的核心技能。我在实际项目中发现,合理运用Redis命令往往能使系统性能提升数倍。不同于传统关系型数据库的SQL语法,Redis采用"动词+键名+参数"的简洁语法结构,例如SET user:1001 "{name:'张三',age:28}"这样的典型命令。
Redis命令根据功能可分为五大类:
- 数据操作类(SET/GET/DEL等)
- 系统管理类(CONFIG/INFO等)
- 事务控制类(MULTI/EXEC等)
- 集群管理类(CLUSTER NODES等)
- 脚本扩展类(EVAL/EVALSHA等)
注意:Redis命令对大小写不敏感,但行业惯例使用全大写形式书写命令,键名则建议使用小写加冒号分隔的命名方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心数据操作命令详解
2.1 字符串类型命令
字符串是Redis最基础的数据类型,其相关命令使用频率最高:
bash复制# 基础操作
SET key value [EX seconds] [PX milliseconds] [NX|XX]
GET key
DEL key [key ...]
# 批量操作
MSET key1 value1 key2 value2
MGET key1 key2
# 数值运算
INCR key # 原子性+1
DECR key # 原子性-1
INCRBY key increment
我在电商项目中曾用INCR命令实现秒杀库存的原子性扣减,相比传统方案性能提升20倍以上。EX/NX等参数在分布式锁场景尤为关键,例如:
bash复制SET lock:order123 "1" EX 30 NX # 获取30秒有效期的锁
2.2 哈希类型命令
哈希适合存储对象类型数据,比字符串更节省内存:
bash复制HSET user:1001 name "李四" age 28
HGET user:1001 name
HGETALL user:1001
HINCRBY user:1001 age 1 # 年龄+1
实测表明,存储包含10个字段的用户对象时,哈希比JSON字符串节省40%内存。但要注意HSET的字段数不宜超过1000,否则性能会明显下降。
2.3 列表与集合命令
列表实现队列/栈功能,集合用于去重场景:
bash复制# 列表操作
LPUSH tasks "task1" # 左入队
RPOP tasks # 右出队
LRANGE tasks 0 -1 # 获取全部元素
# 集合操作
SADD tags "python" "redis"
SISMEMBER tags "redis" # 检查存在性
在消息队列场景中,我推荐使用LPUSH+BRPOP组合实现阻塞队列,比专业MQ更轻量。集合运算(SINTER/SUNION等)在社交关系分析中非常高效。
3. 高级特性命令实战
3.1 事务与管道
Redis事务通过MULTI-EXEC实现原子操作:
bash复制MULTI
INCR counter
INCR total
EXEC # 原子执行
但要注意Redis事务不支持回滚,某个命令失败会继续执行后续命令。管道技术能显著提升批量操作性能:
python复制# Python示例:管道提升10倍吞吐量
pipe = redis_client.pipeline()
for i in range(1000):
pipe.set(f"key{i}", i)
pipe.execute()
3.2 Lua脚本扩展
复杂逻辑建议使用EVAL执行Lua脚本:
lua复制-- 实现原子性的库存检查与扣减
local stock = tonumber(redis.call('GET', KEYS[1]))
if stock > 0 then
redis.call('DECR', KEYS[1])
return 1
end
return 0
我在秒杀系统中使用该脚本,QPS达到2万+/秒。脚本执行是原子性的,且比事务更灵活。
3.3 持久化相关命令
根据业务需求选择合适的持久化策略:
bash复制SAVE # 阻塞式RDB持久化
BGSAVE # 后台RDB持久化
APPEND ONLY MODE # 开启AOF
生产环境建议同时开启RDB和AOF,用CONFIG SET动态调整策略。我曾遇到因AOF重写导致CPU飙升的问题,最终通过auto-aof-rewrite-percentage参数调优解决。
4. 运维监控命令宝典
4.1 状态监控命令
bash复制INFO # 完整服务器信息
INFO memory # 内存专项统计
CLIENT LIST # 查看连接客户端
SLOWLOG GET # 获取慢查询
建议将INFO输出接入监控系统,重点关注:
- used_memory_human:内存使用量
- instantaneous_ops_per_sec:实时QPS
- keyspace_hits:缓存命中率
4.2 配置管理命令
bash复制CONFIG GET * # 获取所有配置
CONFIG SET timeout 300 # 动态修改配置
CONFIG REWRITE # 持久化配置到文件
我曾用CONFIG SET临时解决连接数爆满问题,但切记修改后需要CONFIG REWRITE保存到配置文件。
4.3 集群管理命令
bash复制CLUSTER NODES # 查看集群节点
CLUSTER INFO # 集群状态
CLUSTER KEYSLOT key # 计算键的槽位
在集群迁移时,MIGRATE命令配合CLUSTER KEYSLOT能实现精准数据迁移。但要注意网络中断可能导致迁移失败。
5. 性能优化与避坑指南
5.1 高频问题解决方案
-
大Key问题:
- 用
MEMORY USAGE key检测大Key - 哈希类型超过1MB应考虑拆分
- 集合元素超过1万需分片
- 用
-
热Key问题:
- 用
redis-cli --hotkeys识别热Key - 采用本地缓存+随机过期时间方案
- 用
-
缓存穿透:
- 布隆过滤器拦截
- 空值缓存:
SET null "" EX 60
5.2 最佳实践参数配置
bash复制# 连接池配置
maxclients 10000
tcp-keepalive 300
# 内存管理
maxmemory 16gb
maxmemory-policy volatile-lru
# 持久化优化
aof-rewrite-incremental-fsync yes
rdbcompression yes
在16核32G的服务器上,这些参数使Redis稳定支撑了5万+的QPS。特别提醒maxmemory必须设置,否则可能引发OOM。
5.3 命令行使用技巧
-
批量删除匹配Key:
bash复制redis-cli --scan --pattern "temp:*" | xargs redis-cli del -
命令行补全:
bash复制
redis-cli --raw -h <host> -p <port> -
性能测试:
bash复制redis-benchmark -t set,get -n 100000 -q
这些技巧在运维过程中能极大提升效率。特别是--scan替代KEYS命令,可以避免阻塞问题。
