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_key2.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 303. 服务器管理命令
3.1 持久化相关命令
SAVE和BGSAVE的选择策略:
- SAVE会阻塞所有客户端请求直到完成
- BGSAVE通过fork子进程执行,期间仍可处理请求
# 手动触发RDB持久化(生产环境慎用SAVE) BGSAVE # 查看最近一次持久化状态 LASTSAVE3.2 连接管理
连接池配置的黄金法则:
# 查看当前连接数 CLIENT LIST # 设置空闲连接超时(单位秒,0表示禁用) CLIENT SETNAME order_service CLIENT KILL TYPE normal4. 事务与脚本命令
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 #keys5. 生产环境实战技巧
5.1 性能优化命令
SCAN替代KEYS的迭代方案:
# 安全遍历所有以user:开头的键(不会阻塞服务) SCAN 0 MATCH user:* COUNT 100 # 针对特定数据类型的扫描 SCAN 0 TYPE string5.2 内存优化策略
MEMORY USAGE的深度使用:
# 查看键的内存占用(字节) MEMORY USAGE user:profile:1001 # 内存碎片整理(主线程阻塞,谨慎使用) MEMORY PURGE6. 监控与调试命令
6.1 实时监控
MONITOR命令的合理使用:
# 查看实时命令(调试后立即关闭,高负载下影响性能) MONITOR # 更安全的替代方案 SLOWLOG GET 10 # 获取最近10条慢查询6.2 配置管理
运行时配置调整技巧:
# 动态修改最大内存(无需重启) CONFIG SET maxmemory 4gb # 持久化配置到redis.conf CONFIG REWRITE7. 集群管理命令
7.1 节点管理
集群状态检查的完整流程:
# 查看集群节点信息 CLUSTER NODES # 手动故障转移 CLUSTER FAILOVER7.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通用命令的深刻理解。