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

2023年 10月 26日 84.0k 0

环境:SpringBoot2.6.12 + Redis6

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

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

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

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

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

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

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

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

    性能对比

    依赖

    
      org.springframework.boot
      spring-boot-starter-data-redis
    
    
      org.apache.commons
      commons-pool2
    

    配置文件

    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() {
        @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倍多。

    相关文章

    Oracle如何使用授予和撤销权限的语法和示例
    Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
    下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
    社区版oceanbase安装
    Oracle 导出CSV工具-sqluldr2
    ETL数据集成丨快速将MySQL数据迁移至Doris数据库

    发布评论