ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Redis通用命令实战:从基础到高并发优化

Redis通用命令实战:从基础到高并发优化

1. Redis通用命令概述

Redis作为当今最流行的内存数据库之一,其强大性能很大程度上源于精心设计的命令体系。在实际开发中,我们大约80%的操作都会集中在20%的核心命令上,这些就是所谓的"通用命令"。不同于针对特定数据结构的专用命令,通用命令是跨数据类型的"瑞士军刀",掌握它们能让你在Redis操作中事半功倍。

我在处理高并发系统的五年间,见证了无数次因为不当使用KEYS命令导致的生产事故,也遇到过因TTL设置不当引发的缓存雪崩。本文将基于这些实战经验,带你系统掌握Redis通用命令的正确打开方式。

2. 键空间操作命令

2.1 键管理基础命令

DEL命令看似简单,但在集群环境下有重要细节:

# 删除单个键 DEL user:1001 # 原子性删除多个键(要么全成功,要么全失败) DEL user:1001 user:1002 product:5001

注意:在Redis集群中,DEL操作的所有key必须位于同一slot,否则需要使用{hash tag}确保键分布在同一节点

EXISTS命令在微服务架构中的典型应用:

# 检查缓存是否存在(返回1存在,0不存在) EXISITS product_cache:5001 # 批量检查(返回存在的key数量) MSETNX product:5001 1 product:5002 1 EXISTS product:5001 product:5002 non_exist_key

2.2 键过期管理

TTL管理是Redis的核心特性之一,使用时要注意这些细节:

# 设置30秒过期(单位秒) EXPIRE session:abc123 30 # 设置毫秒级过期 PEXPIRE temp_token 5000 # 5秒 # 查看剩余时间(-2表示键不存在,-1表示永不过期) TTL session:abc123 # 取消过期设置(转为永久键) PERSIST session:abc123

实战经验:在分布式锁场景中,一定要配合EXPIRE使用,避免死锁。推荐使用SET的NX+EX参数一步到位:

SET lock:order_1234 $uuid NX EX 30

3. 服务器管理命令

3.1 持久化相关命令

SAVE和BGSAVE的选择策略:

  • SAVE会阻塞所有客户端请求直到完成
  • BGSAVE通过fork子进程执行,期间仍可处理请求
# 手动触发RDB持久化(生产环境慎用SAVE) BGSAVE # 查看最近一次持久化状态 LASTSAVE

3.2 连接管理

连接池配置的黄金法则:

# 查看当前连接数 CLIENT LIST # 设置空闲连接超时(单位秒,0表示禁用) CLIENT SETNAME order_service CLIENT KILL TYPE normal

4. 事务与脚本命令

4.1 事务控制

Redis事务的ACID特性解读:

# 开启事务 MULTI # 命令入队 SET user:1001:name "张三" INCR user:1001:visits EXPIRE user:1001:visits 3600 # 执行事务(原子性保证) EXEC

常见误区:Redis事务不支持回滚,命令错误会在EXEC时整体失败

4.2 Lua脚本优化

Lua脚本的典型缓存预热案例:

-- 批量设置热点数据 local keys = {'product:1001', 'product:1002', 'product:1003'} local values = {'{"name":"手机"}', '{"name":"笔记本"}', '{"name":"平板"}'} for i = 1, #keys do redis.call('SET', keys[i], values[i]) redis.call('EXPIRE', keys[i], 86400) end return #keys

5. 生产环境实战技巧

5.1 性能优化命令

SCAN替代KEYS的迭代方案:

# 安全遍历所有以user:开头的键(不会阻塞服务) SCAN 0 MATCH user:* COUNT 100 # 针对特定数据类型的扫描 SCAN 0 TYPE string

5.2 内存优化策略

MEMORY USAGE的深度使用:

# 查看键的内存占用(字节) MEMORY USAGE user:profile:1001 # 内存碎片整理(主线程阻塞,谨慎使用) MEMORY PURGE

6. 监控与调试命令

6.1 实时监控

MONITOR命令的合理使用:

# 查看实时命令(调试后立即关闭,高负载下影响性能) MONITOR # 更安全的替代方案 SLOWLOG GET 10 # 获取最近10条慢查询

6.2 配置管理

运行时配置调整技巧:

# 动态修改最大内存(无需重启) CONFIG SET maxmemory 4gb # 持久化配置到redis.conf CONFIG REWRITE

7. 集群管理命令

7.1 节点管理

集群状态检查的完整流程:

# 查看集群节点信息 CLUSTER NODES # 手动故障转移 CLUSTER FAILOVER

7.2 数据迁移

安全迁移键的步骤:

# 查看键所在的slot CLUSTER KEYSLOT user:1001 # 迁移特定slot到目标节点 CLUSTER SETSLOT 1234 IMPORTING node-id CLUSTER SETSLOT 1234 MIGRATING node-id

在电商秒杀系统中,我们通过组合使用EXPIRE、INCR和WATCH命令实现了百万级QPS的库存扣减。关键点在于:先用WATCH监控库存键,在事务中检查库存并执行扣减,最后设置短时间的EXPIRE防止超卖。这种组合拳的威力正是源于对Redis通用命令的深刻理解。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进