Spring Boot 利用 Redis 实现流水线
Spring Boot 利用 Redis 实现流水线
Redis 是一个高性能的键值存储数据库,通常用于缓存、会话管理、消息队列等场景。在实际应用中,我们经常需要向 Redis 发送多个命令。如果逐个发送这些命令,网络延迟会成为性能瓶颈。为了解决这个问题,Redis 提供了 Pipeline(流水线)功能。通过流水线可以一次性发送多个命令,减少网络往返次数,大幅提升批量操作的性能。
实现代码
package com.springboot;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SessionCallback;
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate<String, Object> template;
@Test
public void pipeline() {
var begin = System.currentTimeMillis();
template.executePipelined(new SessionCallback<Object>() {
@Override
public Object execute(RedisOperations operations) throws DataAccessException {
// 批量执行 10 万条 set 命令
for (int i = 0; i < 100000; i++) operations.opsForValue().set("com:user:" + i, "peppa_" + i);
return null; // 流水线操作无需返回结果,返回 null 即可
}
});
var end = System.currentTimeMillis();
System.out.println("耗时:" + (end - begin) + "ms");
}
}
执行结果
耗时统计
执行 10 万条数据的批量写入操作,总耗时:1437ms

核心说明
- 流水线原理:Redis Pipeline 允许客户端一次性发送多个命令,Redis 服务器批量处理后一次性返回结果,减少了多次网络往返的开销,尤其适合批量操作场景。
- Spring Boot 集成方式:通过
RedisTemplate.executePipelined()方法实现流水线操作,传入SessionCallback接口匿名实现类,在execute方法中批量执行 Redis 命令。 - 注意事项:
- 流水线操作中所有命令会被打包发送,执行过程中无法中断。
- 无需在
SessionCallback中手动提交事务(RedisTemplate已默认处理)。 - 若批量操作数据量极大(如百万级),需注意内存占用,可分批次执行流水线。

浙公网安备 33010602011771号