论如何在使用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
论如何在使用RedisStandaloneConfiguration时让JedisConnectionFactory用上JedisPoolConfig的更多相关文章
- sqlserver复制报”应用复制的命令时在订阅服务器上找不到该行“解决方法
最近遇到“应用复制的命令时在订阅服务器上找不到该行”问题,报错如下: 官方给出的建议是重新同步和初始化订阅,当然,这是一种选择,但是对于动辄上百G的生产库,这种方法会消耗大量的资源和时间.可以通过定位 ...
- 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容
原文:使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容 第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也 ...
- AWT编程时,Button按钮上的中文编程□□□
今天学到AWT编程时,照着书上的代码打,代码如下: import java.awt.*; public class PanelTest{ public static void main(Stri ...
- 记一次开发CefSharp做浏览器时Shopify绑定不上Paypal问题
问题:CefSharp做浏览器时Shopify绑定不上Paypal. shopify绑定Paypal的流程大概是如下图所示 步骤1 步骤2 步骤3 步骤4 出现问题大概是在绑定最后一步,并没有如愿的返 ...
- input输入时光标位置靠上问题解决
在css中如果我们定义了input高度在输入时会发现光标位置靠上了不在居中了,在Chrome浏览器中,当设置了line-height时,input无文字,光标高度与line-height一致:inpu ...
- 在 Visual Studio 中调试时映射调用堆栈上的方法
本文转自:https://msdn.microsoft.com/zh-cn/library/dn194476.aspx 1.创建代码图,以便在调试时对调用堆栈进行可视化跟踪. 你可以在图中进行标注以跟 ...
- 使用Uploadify 时,同时使用了jQuery.Validition 验证控件时,在IE11上出现JS缺少对象错误。
场景: 使用jQuery.1.8.2 使用 Uploadify 3.2上传控件 使用jQuery.Validition 1.9 验证 使用IE 11 时,当鼠标点击上传按钮时,会出现JS 缺少对象错误 ...
- 记:ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案
HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to st ...
- cobbler default system 网络安装时主机的menu上只有一个local选项
问题:使用cobbler default system 做pxe网络安装时,主机启动后安装menu上只有一个local选项,看不到对应的system名字 解决:cobbler default syst ...
随机推荐
- iOS UIWebView与JavaScript的交互 相关资料
UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整 ...
- 生成树协议(STP)的精髓知识
STP生成树协议 1.STP介绍 2.STP生成树算法 1.STP - Spanning tree protocol (生成树协议)是逻辑上断开环路,防止广播风暴的产生.当线路故障,阻塞接口 ...
- 怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案
第一种(亲测可以) 在代码当中的Application启动类当中加入代码 @PostConstruct void started() { //时区设置:中国上海 //time.zone: " ...
- 节点流和处理流(BufferedReader和BufferedWriter,BufferedInputStream和BufferedOutputStream,ObjectlnputStream和objectOutputStream)
一.基本介绍: 1.节点流可以从一个特定的数据源读写数据,如FileReader. FileWriter 如图:字节流是直接对数据源(文件,数组之类存放数据的地方)进行操作 2.处理流(也叫包装流)是 ...
- k8s 通过helm发布应用
什么是helm? Helm 是 Kubernetes 的包管理器.Helm 是查找.分享和使用软件构建 Kubernetes 的最优方式. 在红帽系的Linux中我们使用yum来管理RPM包,类似的, ...
- 正则表达式以及re模块的使用
内容概要 正则表达式简介 字符组 特殊符号 量词 贪婪匹配与非贪婪匹配 取消转义 正则表达式简介 '''正则表达式是一门语言,如果想在python中使用,需要导入re模块''' # 什么是正则表达式? ...
- EMNLP 2017 | Sparse Communication for Distributed Gradient Descent
通过将分布式随机梯度下降(SGD)中的稠密更新替换成稀疏更新可以显著提高训练速度.当大多数更新接近于0时,梯度更新会出现正偏差,因此我们将99%最小更新(绝对值)映射为零,然后使用该稀疏矩阵替换原来的 ...
- .NET 云原生架构师训练营(权限系统 系统演示 ActionAccess)--学习笔记
目录 模块拆分 环境配置 默认用户 ActionAccess 模块拆分 环境配置 mysql migration mysql docker pull mysql docker run -p 3306: ...
- 轻量级DI框架Guice使用详解
背景 在日常写一些小工具或者小项目的时候,有依赖管理和依赖注入的需求,但是Spring(Boot)体系作为DI框架过于重量级,于是需要调研一款微型的DI框架.Guice是Google出品的一款轻量级的 ...
- SpringBoot2.6.x默认禁用循环依赖后的应对策略
一.序言 SpringBoot 2.6.x不推荐使用循环依赖,这是一个好消息,SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了. 如果从低 ...