问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java使用redis时不时的报没有可用的链接

发布网友 发布时间:2022-04-24 09:26

我来回答

2个回答

懂视网 时间:2022-05-03 19:21

Redis是一个单线程的架构,所有的操作全部都在一个主线程中完成。所以一旦Redis发生阻塞,那将是一场噩梦。接下来,我们就来看下对于Redis发生阻塞问题。如何排查以及解决。

Redis数据结构或API使用不合理

存在大对象且对大对象进行复杂的较高的命令

1、对一个有千万个元素的hash执行hgetall操作, 或del操作.类似的这种操作都会造成Redis阻塞

2、对于这种大对象可以采用redis-cli -h {host} -p {port} bigkeys 来查看。但是该命令只能查询某类型中的其
中最大的一个key。如果你想查询多个。可以采用修改redis-cli源代码的方式(Redis的源代码是C)。如果不想修 改源代码的话也可以使用scan来完成。

对于Scan命令需要注意。该命令只能扫描单台Redis上的数据。如果你是一个集群,需要每台机器执行一遍。但是如果你使用开源的客户端的话(比如:Java的Lettuce客户端)就已经帮你把scan命令实现为可以扫描整个集群了。

3、然后对大对象进行拆分。具体拆分要视业务而定了。

Redis的CPU使用率接近100%

1、从机同步主机数据。从机接受到rdb文件后从磁盘加载数据

2、主从持久化数据。

3、将cpu使用率达到100%,有可能是真实业务访问量确实很大。单台Redis达到每秒处理6万+的请求。这个时候就只能做水平扩展了

4、如果Redis每秒操作数只有几百,或者几千,且cpu还是很高的话就有可能使用了高算法复杂度的命令。例如hgetall。还有一种可能是内存的过度优化导致。这种情况目前暂时没有遇到,但也纳入考虑范围。

Cpu竞争

1、Redis是一个CPU密集型的应用,不适合和其他CPU密集的服务部署在一起。

2、在生产环境中,我们一台服务器的配置是32核逻辑cpu, 256GB内存。每台机器如果只部署一台Redis比较浪费。所以可能会一台机器部署多个Redis。通常会将Redis进程绑定到CPU上。但是在生成RDB文件或者AOF持久话时,就会产生子进程。这样子进程与父进程会产生CPU竞争。所以当开启持久化或者主节点。不建议绑定CPU

内存交换

Redis是一个内存型数据库,所有数据全部放在内存中。所以强烈建议不开启内存交换

网络问题

主从同步网络延迟较大的话,导致从机经常断线重连。如果断线时间久了。导致从机再次连接上主机时会全量同步,这时主机,从机都会收到影响

更多redis知识请关注redis入门教程栏目。

热心网友 时间:2022-05-03 16:29

出现这种问题从以下几个方面排查:
1、网络不稳定,这种情况只会出现在调用机器和redis服务器不在同一台机器的情况,如果调用本机redis请忽略。
2、使用了连接池,并发较大,连接池配置的最大连接数过小,客户端从连接池获取连接时,如果没有可用连接就阻塞当前线程直到有可用连接,等待时间超过配置的超时时间后会抛出连接超时异常。
3、同样是使用连接池的情况,从连接池获取连接,使用完成后没有释放连接,导致连接池链接耗尽。
4、还有可能是硬件性能瓶颈,比如单节点的redis,但是需要支持特别大的并发量,无论怎么优化配置都是徒劳的,这种情况就需要考虑做读写分离,搭建redis集群等,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...防御里的4个都开不起来 错误的代码是80020002 80010007 煎牛排用什么肉好 茄子怎么做比较好吃呢? English tabloid手抄报 English tabloid手抄报怎么画 邓小平“南方讲话”关于发展问题最著名的观点是( )。 电脑电源输出12V、5V的作用是什么? win10手机能玩电脑游戏win10系统的手机难道可以安装和电脑一样的软件... 如何设置才能做到只能通过远程桌面访问server2003 怎样解电脑开机密码?且要保住电脑资料,请各位高手赐教,谢谢! 糖友荟糖友荟简介 买保险被骗,可是没证据,能全额退保吗 没有证据怎么才能全额退保? java怎么连接线上redis 发生事故后,自己没有明确的证据,怎样才能全额退保? 怎么在java中使用redis java程序怎么连接redis 爱普生R230打印机如何打印光盘封面? 如何使用epsonprintcd制作cd/dvd光盘盘面 光盘封面贴纸打印用什么样的打印机? 关于爱普生R230打印机打印光盘盘面求教? 如何使用佳能IP4500喷墨打印机的光盘盘面打印 功能 请问如何往光盘盘面上刻字? 对于制作光盘封面,直接光盘打印与用光盘贴纸 光盘打印是什么意思? 请各位提供几款支持光盘盘面打印的打印机? 光盘的盘面是怎样印刷上去的,一个人可不可以实现 打印光盘还需要喷墨打印机吗 想在光盘盘面上打印,最好是打印刻录能一起的,有什么比较好的机器? 十二生肖四不像,采摘乐怡怡指什么生肖 十二生肖四不像是什么 没有证据怎么才能全额退保 java 链接redis 怎么加锁 保监会全额退保需要什么证据? java连接redis超时问题怎么解决 欺骗购买泰康人寿保险当时没证据怎么办能全额退款吗? java链接redis 是什么协议 拿钱不办事没有任何证据怎么办才能要回自己的钱? java 每一次都要重新连接redis吗 无任何证据怎样讨回工资 java怎么连接 redis desktop manager linux java连接redis必须用密码吗 打官司,没有证据怎么办 谁有好用的Java使用redis的封装的示例? 没有证据的案件怎么处理 通过java调用redis怎么导入包 java怎么连接AWS的elasticache使用redis 保险员误导客户夸大收益,又没有证据,11年买的,问一下能不能全额退款? java redis有什么作用 业务员欺骗了我,没有证据可以退全款吗 打官司 没有证据 怎么才可以赢?