Redis 从入门到精通(十):管道技术

系列导读:本篇将深入讲解 Redis 管道技术,大幅提升批量操作性能。


文章目录

    • 一、管道技术原理
      • [1.1 传统请求模式](#1.1 传统请求模式)
      • [1.2 管道模式](#1.2 管道模式)
    • 二、管道使用方式
      • [2.1 命令行管道](#2.1 命令行管道)
      • [2.2 Python 管道](#2.2 Python 管道)
      • [2.3 Java 管道](#2.3 Java 管道)
    • 三、性能对比
      • [3.1 测试代码](#3.1 测试代码)
      • [3.2 性能对比](#3.2 性能对比)
    • 四、最佳实践
      • [4.1 适用场景](#4.1 适用场景)
      • [4.2 注意事项](#4.2 注意事项)
    • 总结

一、管道技术原理

1.1 传统请求模式

复制代码
客户端                服务端
  │                     │
  │──── 请求1 ─────────►│
  │◄──── 响应1 ─────────│
  │                     │
  │──── 请求2 ─────────►│
  │◄──── 响应2 ─────────│
  │                     │
  │──── 请求3 ─────────►│
  │◄──── 响应3 ─────────│

每次请求都需要等待响应(RTT开销)

1.2 管道模式

复制代码
客户端                服务端
  │                     │
  │──── 请求1 ─────────►│
  │──── 请求2 ─────────►│
  │──── 请求3 ─────────►│
  │                     │
  │◄──── 响应1 ─────────│
  │◄──── 响应2 ─────────│
  │◄──── 响应3 ─────────│

批量发送,批量接收,减少RTT

二、管道使用方式

2.1 命令行管道

bash 复制代码
# 使用管道批量执行
(echo -en "PING\r\nSET key1 value1\r\nGET key1\r\n"; sleep 1) | nc localhost 6379

# 使用redis-cli --pipe
cat commands.txt | redis-cli --pipe

2.2 Python 管道

python 复制代码
import redis

r = redis.Redis(host='localhost', port=6379)

# 使用管道
pipe = r.pipeline()

# 批量操作
pipe.set('key1', 'value1')
pipe.set('key2', 'value2')
pipe.set('key3', 'value3')
pipe.get('key1')

# 执行
results = pipe.execute()
print(results)

2.3 Java 管道

java 复制代码
Jedis jedis = new Jedis("localhost");
Pipeline pipeline = jedis.pipelined();

pipeline.set("key1", "value1");
pipeline.set("key2", "value2");
pipeline.get("key1");

List<Object> results = pipeline.syncAndReturnAll();

三、性能对比

3.1 测试代码

python 复制代码
import redis
import time

r = redis.Redis()

# 无管道
start = time.time()
for i in range(10000):
    r.set(f'key{i}', f'value{i}')
print(f"无管道: {time.time() - start:.2f}秒")

# 有管道
start = time.time()
pipe = r.pipeline()
for i in range(10000):
    pipe.set(f'key{i}', f'value{i}')
pipe.execute()
print(f"有管道: {time.time() - start:.2f}秒")

3.2 性能对比

操作 无管道 有管道 提升
10000次SET 1.18秒 0.25秒 5倍
100000次SET 11.8秒 2.5秒 5倍

四、最佳实践

4.1 适用场景

复制代码
✅ 批量写入数据
✅ 批量读取数据
✅ 数据迁移
✅ 初始化数据

4.2 注意事项

python 复制代码
# 控制管道大小,避免内存溢出
def batch_insert(data, batch_size=1000):
    pipe = r.pipeline()
    for i, item in enumerate(data):
        pipe.set(item['key'], item['value'])
        if (i + 1) % batch_size == 0:
            pipe.execute()
            pipe = r.pipeline()
    pipe.execute()

总结

本文我们学习了:

管道原理 :减少RTT开销

使用方式 :命令行、Python、Java

性能提升 :5倍以上性能提升

最佳实践:控制批次大小

下篇预告 :[Redis 从入门到精通(十一):持久化配置](#Redis 从入门到精通(十一):持久化配置)


作者 :刘~浪地球
系列 :Redis 从入门到精通(十)
更新时间:2026-04-06

相关推荐
AC赳赳老秦14 小时前
OpenClaw与思维导图工具联动:自动生成工作规划脑图、拆解任务节点,适配职场管理
java·大数据·服务器·数据库·python·php·openclaw
IronMurphy14 小时前
Redis拷打第六讲
redis·spring·mybatis
zhishijike14 小时前
全国行政区划sql(省市区)
数据库·sql·mysql
早川91914 小时前
Hbase、MySQL和Redis区别
redis·mysql·hbase
KaMeidebaby14 小时前
卡梅德生物技术快报|单 B 细胞抗体技术:全犬源单抗制备流程、关键参数与性能验证
前端·数据库·其他·百度·新浪微博
KG_LLM图谱增强大模型15 小时前
scHilda:大模型与知识图谱分层融合,突破单细胞分型瓶颈
数据库·人工智能·知识图谱
凯瑟琳.奥古斯特15 小时前
力扣3654:二维矩阵连续空位统计
数据结构·数据库·算法·职场和发展
qq_54702617915 小时前
SpringBoot + Redis 电商秒杀完整方案
spring boot·redis·后端
满昕欢喜15 小时前
SQL Server的概述与安装
数据库·sqlserver
2501_9307077815 小时前
使用C#代码在 Excel 中为数据透视表添加筛选器
数据库·数据挖掘·数据分析