Redis Pipeline和MGET有啥区别?
Redis Pipeline和MGET有啥区别?
月伴飞鱼两者都是 Redis 批量操作的方式,但在 实现原理 和 适用场景 上有很大不同。
pipeline
(流水线)
Redis Pipeline 允许在 单个请求中发送多个命令,减少网络 I/O 开销,提高性能。
它适用于批量写入或读取场景。
特点
- 多个命令一起发送,但执行顺序不变。
- 减少 TCP 往返次数(N 个请求变成 1 次)。
- 适用于批量写入、批量读取、事务提交。
示例
1 | import redis |
执行流程
set key1 value1
set key2 value2
get key1
get key2
- 一次性发送到 Redis 服务器
- Redis 依次执行
- 返回所有结果
MGET
(批量获取)
MGET
是 Redis 提供的 原生批量查询 命令,可以一次性获取多个 Key 的值。
特点
- 只能用于
GET
操作(批量读取)。 - 底层执行是一个 Redis 命令,因此比
pipeline
更高效。 - Redis 服务器端一次性执行
MGET
并返回结果,减少 CPU 开销。
示例
1 | import redis |
执行流程
MGET key1 key2
- Redis 一次性查询多个 key
- 一次性返回所有结果
pipeline
vs MGET
对比
对比项 | pipeline | MGET |
---|---|---|
网络请求方式 | 发送多个命令,减少 TCP 交互 | 仅需 1 次命令 |
执行方式 | 逐条执行,结果顺序固定 | 批量查询,一次返回 |
适用范围 | 读写皆可(SET, GET, INCR, EXPIRE 等) | 仅适用于 GET 操作 |
性能 | 稍低(多个命令) | 更高效(单条命令) |
Redis 服务器端处理 | 逐条执行 | 一次性执行 |
是否适合事务 | 适合 | 不适合 |
适用场景
适合 pipeline
- 批量写入(如
SET key1 value1
、SET key2 value2
)。 - 组合操作(如
SET + GET
或INCR + EXPIRE
)。 - 事务操作(如
MULTI/EXEC
)。 - 批量删除、过期处理。
适合 MGET
- 仅批量查询 key,如:
- 获取多个用户信息:
MGET user:1 user:2 user:3
- 读取缓存数据(如 Redis 作为缓存层)
- 获取多个用户信息:
结论
- 如果只是批量读取,用
MGET
更快。 - 如果需要批量执行多个不同命令(读写混合),用
pipeline
更灵活。
简单记忆
MGET
更高效,但只能GET
。pipeline
适用于读写混合,减少网络开销。