SpringBoot 配置 Redis 连接池

SpringBoot 配置 Redis 连接池SpringBoot2.0默认采用Lettuce客户端来连接Redis服务默认是不使用连接池的,只有配置redis.lettuce.pool下的属性的时候才可以使用到redis连接池

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

前言

SpringBoot2.0默认采用 Lettuce 客户端来连接 Redis 服务
默认是不使用连接池的,只有配置 redis.lettuce.pool下的属性的时候才可以使用到redis连接池

版本说明

  • spring-boot-starter-data-redis:2.5.4
  • redis6.2.5
  • commons-pool2:2.8.1
    采用 Lettuce 使用连接池,要依赖commons-pool2

pom 文件相关依赖

        <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>

Jetbrains全家桶1年46,售后保障稳定

配置文件

  • 单机
spring:
  redis:
    host: 192.168.1.201
    port: 6379
    password: 123456
    timeout: 5000ms # 连接超时时间(毫秒)
    lettuce:
      pool:
        max-active: 20 # 连接池最大连接数(使用负值表示没有限制)
        max-idle: 10 # 连接池中的最大空闲连接
        min-idle: 5 # 连接池中的最小空闲连接
        max-wait: 5000ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
  • 集群
spring:
  redis:
    host: 192.168.1.26
    port: 7001
    password: 123456
    timeout: 5000ms # 连接超时时间(毫秒)
    cluster:
      nodes: 192.168.1.26:7001,192.168.1.26:7002,192.168.1.26:7003,192.168.1.26:7004,192.168.1.26:7005,192.168.1.26:7006
    lettuce:
      pool:
        max-active: 20 # 连接池最大连接数(使用负值表示没有限制)
        max-idle: 10 # 连接池中的最大空闲连接
        min-idle: 5 # 连接池中的最小空闲连接
        max-wait: 5000ms # 连接池最大阻塞等待时间(使用负值表示没有限制)

配置过程中产生的疑惑

问题1: 连接池是否生效?

这里我用两种方式分别验证了一下

  • 分析 RedisTempalte 源码
  • 向 redis 中存个十万条数据 如果连接池生效,那存入的速度应该会更快

分析 RedisTempalte 源码

从 redisTemplate.opsForValue().set(key, value); 直接开始
在这里插入图片描述
看 execute() 方法
在这里插入图片描述
看 RedisConnectionFactory
在这里插入图片描述
没有配置连接池时
在这里插入图片描述
配置连接池后
可以看到 clientConfiguration 多了 poolConfig 对象里面正是配置文件配置的相关参数
在这里插入图片描述

存数据测试速度

插入 1 W 条数据
配置了连接池 :
在这里插入图片描述
没配连接池 :
在这里插入图片描述
配置了连接池执行速度快了很多,连接池确实生效了

没有配置连接池并且 timeout 太小 还很容易发生连接超时异常,会在执行中报错
Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException

2 W 条数据没全部插入
在这里插入图片描述

问题2: 连接池生效的前提下, 最小空闲连接是 5 ,redis 客户端的连接数为什么还是 1 呢?

通过统计 redis 客户端的连接数发现项目启动后 redis 的连接数 + 1,如果说连接池配置生效的话,redis 的连接数 应该加连接池中的最小空闲连接数才对.

统计客户端连接数

lsof -i:6379 | awk -F '->' '{print $2}' | awk -F ':' '{print $1}' | awk '{sum[$1]+=1} END {for(k in sum) print k ":" sum[k]}' | sort -n -r -k 2 -t ':'

Lettuce 和 Jedis 的都是连接Redis Server的客户端程序。Jedis在实现上是直连redis server,多线程环境下非线程安全(即多个线程对一个连接实例操作,是线程不安全的),除非使用连接池,为每个Jedis实例增加物理连接。Lettuce基于Netty的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问(即多个线程公用一个连接实例,线程安全),同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

在这里插入图片描述

经测试发现,基于 Lettuce 连接 redis, 开始会先创建一个连接实例,当一个实例不够用了才会去创建新的连接实例直到数量达到 max-active,请求高峰过去后,会先维持最大空闲连接一段时间,之后逐渐减少至最小空闲连接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/231297.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 深度学习—2.常见的神经网络结构

    深度学习—2.常见的神经网络结构

  • 俞敏洪新东方的起步_新东方俞敏洪的故事

    俞敏洪新东方的起步_新东方俞敏洪的故事来源:国王与王后丨作者: 果子离啊数据猿官网|www.datayuan.cn今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博…

  • 利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件

    利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件(转)从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在默认情况下给隐藏起来,普通用户根本不知道是怎么回事。公司产品同样也遇到这样的问题,唯一的办法就是将控件做成一个exe文件,供用户下载手动安装注册;这样就需要

  • Google 地图切片URL地址解析

    Google 地图切片URL地址解析一、Google地图切片的投影方式及瓦片索引机制1.地图投影Google地图采用的是Web墨卡托投影(如下图),为了方便忽略了两极变形较大的地区,把世界地图做成了一个边长等于赤道周长的正方形(赤道半径为6378137米),原点在正方形中心,即经纬度为(0,0)处。Web墨卡托投影的X,Y坐标取值范围为:[-20037508.3427892,20037508.3427892]…

  • css3 媒体类型(Media Type)[通俗易懂]

    css3 媒体类型(Media Type)[通俗易懂]linkhref=”css/reset.css”rel=”stylesheet”type=”text/css”media=”screen”/>linkhref=”css/style.css”rel=”stylesheet”type=”text/css”media=”all”/>linkhref=”css/print.css”rel=”stylesheet”ty

  • XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理文章目录XSS的攻击相关资料整理跨站脚本攻击(XSS)XSS 简介XSS 危害XSS 原理XSS 分类XSS 防御总结XSS 问答参考资料跨站脚本攻击(XSS)XSS 简介人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号