0
点赞
收藏
分享

微信扫一扫

Redis 的 Pipeline

E_topia 08-05 06:00 阅读 21

什么是 Redis Pipeline?

Pipeline(管道) 是 Redis 提供的一种批量执行命令的优化机制。它允许客户端将多个命令一次性发送给 Redis 服务端,服务端依次执行并批量返回结果,从而大幅减少网络往返次数(RTT)

Pipeline 的核心优势:

优势

说明

⚡ 性能提升显著

减少网络 IO 次数,QPS 提升 5~10 倍

📦 批量操作友好

适合批量 SETGETDEL 等操作

🧱 简单易用

不需要写 Lua 脚本,开发成本低

🔄 保持原子性(可选)

可结合 MULTI/EXEC 实现事务性批量操作

实战演示:使用 Jedis 实现 Pipeline

1. 添加依赖(Maven)

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>

2. Java 代码示例

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import java.util.List;

public class RedisPipelineDemo {
    public static void main(String[] args) {
        try (Jedis jedis = new Jedis("localhost", 6379)) {
            // 开启 Pipeline
            Pipeline pipeline = jedis.pipelined();

            // 批量添加命令(不会立即执行)
            for (int i = 0; i < 1000; i++) {
                pipeline.set("key:" + i, "value-" + i);
            }

            // 执行所有命令并获取结果
            List<Object> results = pipeline.syncAndReturnAll();

            System.out.println("成功写入 " + results.size() + " 条数据");
        }
    }
}

📌 关键点:

  • pipeline.set() 只是将命令放入缓冲区
  • pipeline.syncAndReturnAll() 才是真正发送并获取结果

其他客户端如何使用 Pipeline?

1. Lettuce(推荐用于 Spring Boot)

StatefulRedisConnection<String, String> connection = client.connect();
RedisAsyncCommands<String, String> async = connection.async();

List<RedisFuture<String>> futures = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    futures.add(async.set("key:" + i, "value-" + i));
}

// 等待所有完成
for (RedisFuture<String> future : futures) {
    future.get();
}

2. Spring Data Redis

@Autowired
private RedisTemplate<String, String> redisTemplate;

public void batchSet() {
    redisTemplate.executePipelined((RedisCallback<String>) connection -> {
        for (int i = 0; i < 1000; i++) {
            connection.set(("key:" + i).getBytes(), ("value-" + i).getBytes());
        }
        return null;
    });
}

Pipeline 是提升 Redis 批量操作性能的“银弹”。在面对大量独立命令时,务必优先考虑使用 Pipeline,它可以让你的 Redis QPS 轻松提升 5~20 倍,显著降低系统延迟,提升用户体验。

举报

相关推荐

0 条评论