IDC

SpringBoot项目中Redis之管道技术

作者:admin 2021-04-19 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

环境:springboot2.3.9.RELEASE + redis3.2.100

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

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

Redis 管道技术

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

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

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

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

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

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

性能对比

依赖

  1. <dependency> 
  2.             <groupId>org.springframework.boot</groupId> 
  3.             <artifactId>spring-boot-starter-data-redis</artifactId> 
  4.         </dependency> 
  5.         <dependency> 
  6.             <groupId>org.apache.commons</groupId> 
  7.             <artifactId>commons-pool2</artifactId> 
  8. </dependency> 

配置文件

  1. spring: 
  2.   redis: 
  3.     host: localhost 
  4.     port: 6379 
  5.     password: ****** 
  6.     database: 4 
  7.     lettuce: 
  8.       pool: 
  9.         maxActive: 8 
  10.         maxIdle: 100 
  11.         minIdle: 10 
  12.         maxWait: -1 

普通方法

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

测试结果

总耗时:47秒左右

管道技术

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

测试结果

耗时:13秒左右

性能提升了3倍多。

完毕!!!


本文转载自网络,原文链接:https://www.toutiao.com/i6942277978181304863/

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 太棒了!Python和Excel过了这么久终于

    太棒了!Python和Excel过了这么久终于

  • Java编程内功-数据结构与算法「线索化

    Java编程内功-数据结构与算法「线索化

  • 在Java中使用异步编程

    在Java中使用异步编程

  • Kafka性能篇:为何Kafka这么&quot;

    Kafka性能篇:为何Kafka这么&quot;

腾讯云代理商
海外云服务器