SpringBoot 配置 Redis 连接池
前言
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>
配置文件
- 单机
spring:redis:host: 192.168.1.201port: 6379password: 123456timeout: 5000ms # 连接超时时间(毫秒)lettuce:pool:max-active: 20 # 连接池最大连接数(使用负值表示没有限制)max-idle: 10 # 连接池中的最大空闲连接min-idle: 5 # 连接池中的最小空闲连接max-wait: 5000ms # 连接池最大阻塞等待时间(使用负值表示没有限制)
- 集群
spring:redis:host: 192.168.1.26port: 7001password: 123456timeout: 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:7006lettuce: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,请求高峰过去后,会先维持最大空闲连接一段时间,之后逐渐减少至最小空闲连接
SpringBoot 配置 Redis 连接池相关推荐
- SpringBoot配置druid连接池
一.添加pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>druid-spri ...
- springboot 配置德鲁伊连接池
一.数据库连接池 1.1什么是数据库连接池 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免 ...
- Springboot配置MongoDB连接池
第一步:src/main/resources下新建配置文件application.properties #spring.data.mongodb是前缀,任意写 spring.data.mongodb. ...
- springboot引入Redis配置JedisPool连接池
目录 一.pom.xml依赖 二.application.properties配置 三.java配置类 四.单元测试 一.pom.xml依赖 <dependency><groupId ...
- 配置springboot使用c3p0连接池
为什么要使用c3p0? 使用springboot默认的数据源配置方式: spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: j ...
- redis专题:redis键值设计、性能优化以及redis连接池配置
文章目录 1.redis键值设计 ①:key设计规范 ②:value设计规范 2. 命令使用优化 3. redis连接池配置参数设计 4. redis连接池预热 5. redis的key过期删除策略 ...
- Redis连接池配置详解
连接池配置 文章目录 连接池配置 一.Redis连接池 二.jar包准备 三.编写代码配置,创建连接池,并调用处连接 总结 一.Redis连接池 与JDBC中在与数据库进行连接时耗时,从而需要引入连接 ...
- SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid)
SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,druid) 文章目录 SpringBoot中数据连接池的配置(tomcat,HikariCP,dbcp2,drui ...
- Redis连接池Lettuce Jedis 区别
Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. pring boot框架中已经集成了redis,在1.x.x的版本时默认使用的j ...
最新文章
- Spring 执行 sql 脚本(文件)
- (十) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
- 2022年跨境电商新玩法:Tik Tok私域流量沉淀+电商平台流量承接
- 设计模式之工厂模式(三)
- 如何实现点击微信内置浏览器返回按钮,返回指定页面,或者原地刷新
- 极客修回应“以次充好”报道:内部已经展开调查
- mfc搜索新建access字段_vs2010MFC中使用ODBC链接ACCESS数据库,怎样编写查找功能?...
- Bootstrap滚动监控器
- sphinx结合scws的mysql全文检索
- 一款免费的网络时间校准小程序
- word中插入emf,svg图像的注意事项
- 常用代码生成工具汇总(转)
- mysql中drop语法错误_MySQL DROP TABLE操作以及 DROP 大表时的注意事项
- win10计算机错误代码,win10电脑更新失败提示错误代码0x80070424修复方法
- iOS基础——通过案例学知识之LaunchScreen、APPIcon、StatusBar、UIScrollView、UIPageControl
- 罗振宇2017跨年演讲:我们这代人的机会在哪里?
- 推荐一个不错的国外html5模板网站
- SDH同步数字系列(Synchronous Digital Hierarchy,SDH)--SONET同步光网络(Synchronous Optical NETwork,SONET)
- UG NX二次开发(C#)-曲线-NXOpen.Curve初探
- Dell B1260dn Printer驱动的安装