Redis命令参考
数据类型相关命令
- SET:设置键值,支持过期时间、不存在/存在条件。
 - GET:获取键值,若键不存在返回 
nil。 - INCR/DECR:将键的整数值增1/减1,键不存在时初始化为0。
 - MSET/MGET:批量设置/获取多个键值。
 - LPUSH/RPUSH:从列表左/右侧插入元素。
 - LPOP/RPOP:移除并返回列表左/右侧第一个元素。
 - LRANGE:获取列表指定范围的元素。
 - HSET/HGET:设置/获取哈希字段值。
 - HGETALL:获取哈希所有字段和值。
 - HINCRBY:哈希字段整数值增加指定数值。
 - SADD/SREM:添加/移除集合元素。
 - SMEMBERS:返回集合所有元素(慎用大集合)。
 - SINTER/SUNION:返回多个集合的交集/并集。
 - ZADD:添加带分值的成员到有序集合。
 - ZRANGE/ZREVRANGE:按分值升序/降序返回有序集合成员。
 - ZINCRBY:增加有序集合成员的分值。
 
事务与脚本
- MULTI:开启事务,后续命令入队。
 - EXEC:执行事务队列中的所有命令。
 - WATCH/UNWATCH:监视键变化,若被修改则事务中止。
 - EVAL:执行Lua脚本,支持原子性操作。
 - EVALSHA:通过SHA1执行缓存的脚本。
 - SCRIPT LOAD:加载脚本到缓存,返回SHA1摘要。
 
持久化与备份
- SAVE:同步生成RDB快照,阻塞主线程。
 - BGSAVE:异步生成RDB快照,子进程执行。
 - LASTSAVE:返回最后一次成功生成RDB的时间戳。
 - BGREWRITEAOF:异步重写AOF文件,优化体积。
 - APPEND:追加值到键(底层AOF操作)。
 
集群与高可用
- SLAVEOF/REPLICAOF:将当前节点设置为指定主节点的从节点。
 - CLUSTER INFO:返回集群基本信息(状态、槽分配)。
 - CLUSTER NODES:列出集群所有节点的详细信息。
 - CLUSTER ADDSLOTS:将指定哈希槽分配给当前节点。
 - SENTINEL MASTERS:列出被监控的主节点信息。
 - SENTINEL GET-MASTER-ADDR-BY-NAME:获取主节点地址。
 
系统管理与监控
- CLIENT LIST:列出所有客户端连接信息。
 - CLIENT KILL:关闭指定客户端连接。
 - INFO:返回服务器状态信息(内存、CPU、复制等)。
 - SLOWLOG:查看慢查询日志。
 - MONITOR:实时监控所有命令(生产环境慎用)。
 
高级功能
- SUBSCRIBE/PUBLISH/UNSUBSCRIBE:订阅/发布/取消订阅频道消息。
 - GEOADD:添加地理位置坐标。
 - GEODIST:计算两地距离。
 - GEORADIUS:返回指定半径内的位置。
 
其他实用命令
- KEYS/SCAN:查找匹配模式的键(
SCAN非阻塞迭代)。 - TTL/PTTL:获取键的剩余过期时间(秒/毫秒)。
 - EXPIRE/PEXPIRE:设置键的过期时间(秒/毫秒)。
 - TYPE:返回键的数据类型。
 - DEL:删除指定键。
 
事务
事务的核心命令
- MULTI:标记事务开始,后续命令按顺序入队,暂不执行。
 - EXEC:执行事务队列中的所有命令,返回各命令的结果。
 - DISCARD:取消事务,清空命令队列。
 - WATCH <key>:监视指定键,若事务执行前键被修改,则事务终止(类似 CAS 机制)。
 - UNWATCH:取消所有 
WATCH监控。 
事务的特性
- 原子性:
EXEC执行时,所有命令按顺序一次性执行,不会被其他客户端命令打断。 - 无回滚:若命令入队时语法错误,事务直接拒绝执行;运行时错误(如对字符串执行 
INCR)会继续执行后续命令。 - 隔离性:事务执行期间不会被其他客户端操作干扰(单线程模型保证)。
 - 无持久性:是否持久化取决于 Redis 的持久化配置(RDB/AOF)。
 
适用场景
- 批量操作原子性:如批量更新计数器、配置项。
 - 简单 CAS 操作:结合 
WATCH实现乐观锁,避免竞态条件(如库存扣减、余额转账)。 - 非回滚型任务:无需回滚的连续操作(如日志记录、状态标记)。
 
生产环境建议
- 避免长事务:事务队列命令过多会阻塞其他客户端,影响性能。
 - 优先使用 Lua:复杂逻辑用 Lua 脚本替代事务,减少网络开销。
 - 合理使用 WATCH:监控最少数量的键,降低冲突概率。
 
Lua脚本
Lua 脚本的核心优势
- 原子性:脚本整体执行,期间不会被其他命令中断,保证数据一致性。
 - 减少网络开销:合并多个操作到单个脚本,减少客户端与服务端的通信次数。
 - 复杂逻辑支持:支持条件判断、循环、变量等编程结构,灵活处理业务逻辑。
 - 高性能:脚本在服务端执行,避免多次网络往返,提升吞吐量。
 
Lua 脚本的执行方式
-  
EVAL 命令格式:
EVAL <script> <numkeys> [KEYS...] [ARGV...]- script:Lua 脚本代码。
 - numkeys:键参数的数量(
KEYS数组长度)。 - KEYS:键名列表(避免硬编码,通过参数传递)。
 - ARGV:额外参数列表(如数值、标志位)。
 
 -  
缓存脚本执行
- 预加载脚本:
SCRIPT LOAD "return redis.call('GET', KEYS[1])" - 通过 SHA1 执行:
EVALSHA abcdef12345... 1 user:1 
 - 预加载脚本:
 
Lua 脚本与 Redis 命令的交互
-  
调用 Redis 命令
-  
redis.call():执行 Redis 命令,若命令出错(如键不存在),直接返回错误并终止脚本。
local value = redis.call('GET', KEYS[1]) -  
redis.pcall():执行 Redis 命令,出错时返回 Lua 错误表,脚本继续执行。
local ok, result = pcall(redis.call, 'GET', KEYS[1]) 
 -  
 -  
参数传递与返回值
-  
键和参数分离:
KEYS和ARGV是 Lua 表(数组),索引从 1 开始;严格区分键和参数,避免逻辑混乱。 -  
返回值处理:脚本最终返回值会被转换为 Redis 协议格式(Lua表转为多行回复);支持返回
nil对应(Redis的NULL回复)。 
 -  
 
Lua 脚本的使用原则
-  
原子性与阻塞
- 长时间脚本阻塞:脚本执行期间阻塞其他操作,需避免复杂循环或大量计算;单个脚本执行时间控制在ms级,必要时拆分逻辑。
 
 -  
沙盒环境限制
- 禁用危险操作:无法访问文件系统、网络或调用外部命令;禁止定义全局变量(需使用 
local声明局部变量)。 
 - 禁用危险操作:无法访问文件系统、网络或调用外部命令;禁止定义全局变量(需使用 
 -  
脚本复用性
-  
参数化设计:键和参数通过
KEYS/ARGV传递,避免硬编码,提高脚本通用性。 -  
版本兼容性:不同 Redis 版本支持的 Lua 库函数可能不同(如
redis.breakpoint()仅限调试模式)。 
 -  
 
排序
排序参数详解
- ASC/DESC:升序(默认)或降序排序。
 - ALPHA:按字典序排序字符串元素。
 - BY <pattern>:按外部键的值排序(如 
user:*:age)。 - GET <pattern>:排序后返回外部键的值(可多次使用)。
 - LIMIT offset count:分页获取结果(类似 SQL 的 
LIMIT)。 - STORE <key>: 将排序结果存入新键(列表类型)。
 
排序的工作原理
- 数据加载:从列表、集合或有序集合中提取元素;若使用 
BY或GET,加载外部键的值到内存。 - 排序执行:默认按数值比较(
ALPHA启用字符串比较);使用快速排序算法,时间复杂度 O(N log N)。 - 结果处理:应用 
LIMIT分页;按GET返回指定数据或直接返回元素;若指定STORE,将结果保存为新列表。 
发布与订阅
核心机制
- 角色: 
- 发布者(Publisher):通过 
PUBLISH <channel> <message>发送消息到频道。 - 订阅者(Subscriber):通过 
SUBSCRIBE <channel>订阅频道,或PSUBSCRIBE <pattern>按模式匹配订阅(如news.*)。 - 退订:
UNSUBSCRIBE或PUNSUBSCRIBE取消订阅。 
 - 发布者(Publisher):通过 
 - 消息传递:消息从发布者直接推送到所有订阅者,无中间存储;消息不可回溯,订阅者断开后重连会丢失未连接期间的消息。
 
关键命令与行为
- SUBSCRIBE channel1:订阅指定频道。
 - PSUBSCRIBE news.*:按模式订阅所有以 
news.开头的频道。 - PUBLISH channel1 “Hello”:向 
channel1发布消息 “Hello”。 - UNSUBSCRIBE:退订所有频道。
 
慢查询日志
核心配置参数
-  
slowlog-log-slower-than
-  
作用:定义慢查询的时间阈值(单位:微秒,1秒=1,000,000微秒)。
 -  
示例
config set slowlog-log-slower-than 10000 # 记录超过10毫秒的命令 
 -  
 -  
slowlog-max-len
-  
作用:设置慢查询日志的最大条目数(内存中存储,先进先出)。
 -  
示例
config set slowlog-max-len 500 # 最多保存500条慢查询记录 
 -  
 
查看与分析慢查询日志
- SLOWLOG GET [n]:查看最新的n条记录(默认全部)。
 - SLOWLOG LEN`:查看当前日志条目数。
 - SLOWLOG RESET:清空慢查询日志。
 
监视器
MONITOR 的功能与使用
- 启用监控:客户端执行 
MONITOR后,Redis 会将该连接转为监控模式,实时打印所有命令及其参数: - 输出格式: 
- 时间戳:命令执行的精确时间(秒.微秒)。
 - 客户端信息:数据库编号、客户端 IP 和端口。
 - 命令内容:完整的命令及参数。
 
 
MONITOR 的性能影响
- 高并发写入: 每个命令都会触发 MONITOR 输出,占用大量 CPU 和带宽,可能拖慢 Redis 整体性能。
 - 监控客户端网络延迟:MONITOR 输出量大时,可能阻塞客户端连接,导致其他操作延迟。
 - 内存消耗:Redis 需为每个监控连接维护输出缓冲区,内存压力增大。