论如何在使用RedisStandaloneConfiguration时让JedisConnectionFactory用上JedisPoolConfig
前言
公司项目上线后经常运行一两天后就会出现延时、无响应的情况,当时第一反应觉得可能是某些业务优化不行,检查业务也没发现有什么问题,前前后后倒是修了两三个BUG,本以为没啥事儿了,但也就好了两天,很奇怪,看JVM堆内存也停正常,GC日志也没啥问题,网关限流加上也没起到效果,后来和朋友讨论了下,又深入底层调试了一下,发现问题居然是JedisPoolConfig没有生效……,本着尽量少修改原来代码(主管写的)的原则,所以有了下文
不生效的原因
他不是不用pool,而是用了一个自己的JedisConnectionFactory.MutableJedisClientConfiguration()
而MutableJedisClientConfiguration是一个内类,还不是public的,是protect的。你还没办法在你的configuration里边使用这个类。
MutableJedisClientConfiguration会自动生成一个JedisPoolConfig,这个JedisPoolConfig继承自> GenericObjectPoolConfig,他的pool的配置就是8个。
所以,如果你要用RedisStandaloneConfiguration,基本上就是8个的pool配置。看来spring 也认为,既然是redis的单机版,8个够用了。
[https://blog.csdn.net/gezilan/article/details/82117039][1]
原因找到了,那么问题就解决90%了,尝试了这篇文章中提到的设置方式发现并不适用,所以我骚向胆边生……
你的内部类?你的就是我的!
因为当时这个问题很恶劣,所以能尽快就尽快了,也没有仔细查阅相关资料就赶紧开始动手了。
看了一眼MutableJedisClientConfiguration类,实现自JedisClientConfiguration接口,而JedisConnectionFactory有个构造方法:
public JedisConnectionFactory(RedisStandaloneConfiguration standaloneConfig, JedisClientConfiguration clientConfig) {
this(clientConfig);
Assert.notNull(standaloneConfig, "RedisStandaloneConfiguration must not be null!");
this.standaloneConfig = standaloneConfig;
}
第二个参数类型就是JedisClientConfiguration,而这个方法恰恰就是
public JedisConnectionFactory(RedisStandaloneConfiguration standaloneConfig) {
this(standaloneConfig, new MutableJedisClientConfiguration());
}
这个构造方法所调用的一个重载方法,所以dddd
/**
* 重新实现JedisClientConfiguration接口
* JedisConnectionFactory在创建时可以同时使用RedisStandaloneConfiguration和JedisPoolConfig
*
* @author SomUrim
* @version 1.0
* @since 2021/6/26
*/
public class FuckJedisClientConfiguration implements JedisClientConfiguration {
//dddd
}
芜湖,你的就是我的!
紧接着
JedisClientConfiguration jedisClientConfiguration = FuckJedisClientConfiguration.create(jedisPoolConfig());
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration,jedisClientConfiguration);
解决!
压力测试解决(口述)
之前在排查问题时进行压力测试,50个线程就打死了,使用上面的方法使JedisPoolConfig生效并加以配置后,1w线程屁事儿没有,从修复完成到现在写这篇文章再也没听到过说项目延时、卡死了。起飞!
参考资料:
https://blog.csdn.net/gezilan/article/details/82117039
https://img2022.cnblogs.com/blog/2387823/202203/2387823-20220321114654620-1968944474.gif
最新文章
- WOJ-1097
- JavaEE基础(三)
- Ogre碰撞检测
- 29个要点帮你完成java代码优化
- 【Unity3D】iOS 推送实现
- B - Broken Keyboard (a.k.a. Beiju Text)
- java中访问mysql数据库中的表结构信息
- Java中的异常详解
- (转载)2016 CCF大数据与计算智能大赛 开源资料整理
- 改变input光标颜色与输入字体颜色不同
- core java
- hive数据库的哪些函数操作是否走MR
- C语言——第四次作业
- ROS tf
- vue的组件之间传值方法
- 一张图读懂PBN旁切转弯计算
- loglevel-metamask
- 怎么在sublime里面显示编码格式
- OpenCV学习代码记录——轮廓(contour)检测
- 用Ant给Unity3D导出Eclipse工程打包APK
热门文章
- Net6 DI源码分析Part3 CallSiteRuntimeResolver,CallSiteVisitor
- 1、Linux基础--相关软件安装与网络配置
- Linux基础:初识shell之系统命令基础
- Solution -「多校联训」光影交错
- [LeetCode]771. 宝石与石头
- .NET6: 开发基于WPF的摩登三维工业软件 (7)
- 把SQLAlchemy查询对象转换成字典
- [杂记]LeTeX模板——ppt
- 推荐 10 本 Go 经典书籍,从入门到进阶(含下载方式)
- 【C# 线程】IOCP IO完成端口-Windows系统下常见的7种I/O模型