Redis管道技术瞬间提升系统性能,速度翻倍!

数据库 Redis
Redis管道技术是一种批处理技术,用于一次性处理多个Redis命令,从而提高整个交互的性能。通常情况下,Redis是单行执行的,当客户端向服务器发送请求时,服务端接收并处理请求后再把结果返回给客户端。

环境:SpringBoot2.6.12 + Redis6

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

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

Redis 管道技术

Redis管道技术是一种批处理技术,用于一次性处理多个Redis命令,从而提高整个交互的性能。通常情况下,Redis是单行执行的,当客户端向服务器发送请求时,服务端接收并处理请求后再把结果返回给客户端。然而,当出现集中大批量的请求时,每个请求都需要经历先请求再响应的过程,这会造成网络资源浪费。此时,管道技术应运而生,它把所有的命令整合一次发给服务端,再一次响应给客户端,从而大大提高了Redis的响应速度。

Redis普通请求模型与管道请求模型对比

(普通请求模型)来源网络(普通请求模型)来源网络

RTT(Round-Trip Time),就是往返时延,在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

一般认为,单向时延 = 传输时延t1 + 传播时延t2 + 排队时延t3

(管道请求模型)来源网络(管道请求模型)来源网络

性能对比

依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
</dependency>

配置文件

spring:
  redis:
    host: localhost
    port: 6379
    password: ******
    database: 4
    lettuce:
      pool:
        maxActive: 8
        maxIdle: 100
        minIdle: 10
        maxWait: -1

普通方法

@Resource
private StringRedisTemplate stringRedisTemplate ;
public void execNormal() {
  long start = System.currentTimeMillis() ;
  for (int i = 0; i < 100_000; i++) {
    stringRedisTemplate.opsForValue().set("k" + i, "v" + i) ;
  }
  System.out.println("耗时:" + (System.currentTimeMillis() - start) + " ms") ;
}

测试结果

总耗时:47秒左右

管道技术

public void execPipeline() {
  long start = System.currentTimeMillis() ;
  stringRedisTemplate.executePipelined(new RedisCallback<Object>() {
    @Override
    public Object doInRedis(RedisConnection connection) throws DataAccessException {
      for (int i = 0; i < 100_000; i++) {
        connection.set(("pk" + i).getBytes(), ("pv" + i).getBytes()) ;
      }
      return null ;
    }
  }) ;
  System.out.println("耗时:" + (System.currentTimeMillis() - start) + " ms") ;
}

测试结果

耗时:13秒左右,性能提升了3倍多。

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2015-07-28 09:19:10

Linux内核

2016-09-26 13:50:52

Linux系统性能

2011-08-09 17:15:45

注册表注册表编辑器

2013-02-28 13:37:59

系统性能调优技术实战

2018-12-10 15:13:06

缓存系统性能数据

2009-03-22 19:19:15

多核多核服务器多核历史

2009-02-18 20:27:24

组策略提升Windows性能

2023-06-12 00:22:50

操作系统应用程序内核锁

2016-08-29 17:10:17

JavascriptHtmlCSS

2023-10-23 08:23:16

系统性能数据库

2023-10-17 14:35:22

人工智能AI

2012-12-10 13:43:07

固态硬盘系统性能内存

2018-08-09 09:00:34

2019-06-21 14:40:52

缓存系统性能操作系统

2024-04-01 08:04:05

JProfilerJVM工具

2010-04-23 11:44:34

Aix系统

2009-09-29 10:39:04

Linuxlinux系统性能检测

2016-02-01 18:13:55

存储华为

2020-10-09 17:43:25

计算机CPU技术

2010-04-25 23:39:42

点赞
收藏

51CTO技术栈公众号