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
image

核心说明

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