高并发----redis管道操作,实现批量的数据存储

141 阅读1分钟

环境 springboot2.3.9.RELEASE

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

Redis 管道技术

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应

  • 普通redis客户端和服务器交互模式

image.png

  • Pipeline请求模型

image.png

测试代码

@Test
public void addredis() {
//普通模式添加数据
    Long start = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        Task task = new Task();
        task.setTaskType(1001);
        task.setPriority(2);
        task.setExecuteTime(new Date().getTime());
        cacheService.lLeftPush("1000_1", JSON.toJSONString(task));
    }
    Long end = System.currentTimeMillis();
    System.out.println(end - start);
}
@Test
public void getPip(){
    long start = System.currentTimeMillis();
    redisTemplate.executePipelined((RedisCallback<Object>) redisConnection -> {
        for (int i = 0; i < 10000; i++) {
            Task task = new Task();
            task.setTaskType(1001);
            task.setPriority(1);
            task.setExecuteTime(new Date().getTime());
            redisConnection.lPush("key_1000".getBytes(), JSON.toJSONString(task).getBytes());
        }
        System.out.println("使用管道技术执行10000次自增操作共耗时:" + (System.currentTimeMillis() - start) + "毫秒");
        return null;
    });

}

image.png

image.png

速度提升巨大,好的完毕