服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - Redis管道技术瞬间提升系统性能,速度翻倍!

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

2023-10-27 05:00未知服务器之家 Redis

环境:SpringBoot2.6.12 + Redis6 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应

环境:SpringBoot2.6.12 + Redis6

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

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

Redis 管道技术

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

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

Redis管道技术瞬间提升系统性能,速度翻倍!(普通请求模型)来源网络

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

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

Redis管道技术瞬间提升系统性能,速度翻倍!(管道请求模型)来源网络

性能对比

依赖

<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") ;
}

测试结果

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

总耗时: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") ;
}

测试结果

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

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

延伸 · 阅读

精彩推荐
  • Redis浅谈Redis对于过期键的三种清除策略

    浅谈Redis对于过期键的三种清除策略

    本文主要介绍了Redis对于过期键的三种清除策略,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小小工匠6902022-01-20
  • Redis如何用Redis统计海量UV?

    如何用Redis统计海量UV?

    我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模...

    程序员小饭8662021-08-10
  • RedisRedis 不使用 keys 命令获取键值信息的方法

    Redis 不使用 keys 命令获取键值信息的方法

    这篇文章主要介绍了Redis 不使用 keys 命令获取键值信息的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧 ...

    JenningLang4142019-11-15
  • Redis详解Redis数据类型实现原理

    详解Redis数据类型实现原理

    这篇文章主要介绍了Redis数据类型实现原理,在工作中或学习中有需要的小伙伴可以参考一下这篇文章...

    Nelson-Wang6802021-09-18
  • RedisRedis持久化:RDB和AOF

    Redis持久化:RDB和AOF

    Redis 数据存储在内存中,如果不想办法将数据保存到硬盘上,一旦Redis重启(退出/故障),内存的数据将会全部丢失。我们肯定不想 Redis 里的数据由于某些故...

    未知1382023-05-12
  • Redis浅谈Redis分布式锁的正确实现方式

    浅谈Redis分布式锁的正确实现方式

    这篇文章主要介绍了浅谈Redis分布式锁的正确实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    Ruthless5082019-11-24
  • RedisRedis设置密码保护的实例讲解

    Redis设置密码保护的实例讲解

    今天小编就为大家分享一篇Redis设置密码保护的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    翔之天空2792019-11-14
  • RedisRedis高级玩法之利用SortedSet实现多维度排序的方法

    Redis高级玩法之利用SortedSet实现多维度排序的方法

    Redis的SortedSet是可以根据score进行排序的,以手机应用商店的热门榜单排序为例,根据下载量倒序排列。接下来通过本文给大家分享Redis高级玩法之利用Sor...

    阿飞的博客6022019-11-26