前言

公司项目上线后经常运行一两天后就会出现延时、无响应的情况,当时第一反应觉得可能是某些业务优化不行,检查业务也没发现有什么问题,前前后后倒是修了两三个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

最新文章

  1. WOJ-1097
  2. JavaEE基础(三)
  3. Ogre碰撞检测
  4. 29个要点帮你完成java代码优化
  5. 【Unity3D】iOS 推送实现
  6. B - Broken Keyboard (a.k.a. Beiju Text)
  7. java中访问mysql数据库中的表结构信息
  8. Java中的异常详解
  9. (转载)2016 CCF大数据与计算智能大赛 开源资料整理
  10. 改变input光标颜色与输入字体颜色不同
  11. core java
  12. hive数据库的哪些函数操作是否走MR
  13. C语言——第四次作业
  14. ROS tf
  15. vue的组件之间传值方法
  16. 一张图读懂PBN旁切转弯计算
  17. loglevel-metamask
  18. 怎么在sublime里面显示编码格式
  19. OpenCV学习代码记录——轮廓(contour)检测
  20. 用Ant给Unity3D导出Eclipse工程打包APK

热门文章

  1. Net6 DI源码分析Part3 CallSiteRuntimeResolver,CallSiteVisitor
  2. 1、Linux基础--相关软件安装与网络配置
  3. Linux基础:初识shell之系统命令基础
  4. Solution -「多校联训」光影交错
  5. [LeetCode]771. 宝石与石头
  6. .NET6: 开发基于WPF的摩登三维工业软件 (7)
  7. 把SQLAlchemy查询对象转换成字典
  8. [杂记]LeTeX模板——ppt
  9. 推荐 10 本 Go 经典书籍,从入门到进阶(含下载方式)
  10. 【C# 线程】IOCP IO完成端口-Windows系统下常见的7种I/O模型