redis的read error on connection错误解决

redis的read error on connection错误解决

转载:https://www.cnblogs.com/krainbow/p/4261906.html

昨日,公司php调用redis报错:read error on connection 2015-01-29 23:59:050.13330000,redis存放的是用户session。

    在网上查询,大家说法都比较一致,说是php.ini文件中的一个配置项导致:

    default_socket_timeout = 60

    由于redis扩展也是基于php 的socket方式实现,因此该参数值同样会起作用。

解决方法是:

    1、直接修改php.ini,将其设置为我们想要的值(这个不推荐)

    2、在我们的脚本中通过以下方式设置,这样就比较灵活,不对其他脚本产生影响

ini_set(‘default_socket_timeout’, -1);  //不超时

 

    但是,一看,修改的两个参数,一个是php的全局参数,一个是redis的超时操作,都应该按照实际情况来修改,而且,设置超长超时时间或者不超时都是不合理的;

 

    继续检查redis发现,/usr/local/redis_16379/src/redis-cli -p 16379 info(服务器配置的redis端口为16379,分配内存为8000M)

used_memory_human:7.49G,占用内存已经7.49G

db10:keys=53090286,键值5000多万

    竟然是键值占满了内存,检查php的调用代码,发现php竟然没有设置redis的键值过期时间,修改php代码,对键值设置过期时间

 redis的read error on connection错误解决

    设置完之后,发现之前的键值因为没有设置过期时间,程序不会自动删除,于是用脚本删除主redis上对应的session,

/usr/local/redis_16379/src/redis-cli -p 16379 -n 10 keys “PHPSESSION_wc*” | xargs /usr/local/redis_16379/src/redis-cli -p 16379 -n 10 del

将大部分过期数据删除掉,删除一定数量的数据之后,报错消失,redis连接正常。

 

    但是,发现redis主从,在这样删除之后,从数据竟然没有同步,主的数据和从数据差距有400多万不一致,也没有再发现bgsave操作,查看从日志Trying a partial resynchronization,发现因为过滤keys占用太多资源,造成服务器负载飙升,slave断开与主机的连接,需要从积压空间中找回断开期间的数据更新记录。但是因为删除数据太多,断开的时间足够长,master 拒绝 slave 的部分同步请求,从而 slave 只能进行全同步。

至此,在slave上对数据进行全量同步,数据恢复正常,业务正常。

 

需要注意几点:

    1.redis数据,正常情况下,设置过期时间,否则可能出现,存储键值过多,占用完了预设内存,导致新的键值无法存储,调用redis失败的;

    2.超时时间必须根据实际业务来设置;

    3.如果slave一直连接不上master,可能需要进行全量同步。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112949.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • webstrom最新激活码[在线序列号]

    webstrom最新激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Ubuntu18.04安装 NVIDIA驱动+CUDA10.2+cuDNN+TensorRT

    Ubuntu18.04安装 NVIDIA驱动+CUDA10.2+cuDNN+TensorRT1.先卸载原有n卡驱动#forthedriverinstalledbyapt-get:sudoapt-getremove–purgenvidia*#forthedriverinstalledbyrunfilesudochmod+x*.runsudo./NVIDIA-Linux-x86_64-384.59.run–uninstall如果使用的是apt-

  • linux下卸载apache方法小结

    linux下卸载apache方法小结

  • 大数据建模流程之数据处理[通俗易懂]

    大数据建模流程之数据处理[通俗易懂]原文链接数据是建模的基础,也是研究事物发展规律的材料。数据本身的可信度和处理的方式将直接决定模型的天花板在何处。一个太过杂乱的数据,无论用多么精炼的模型都无法解决数据的本质问题,也就造成了模型的效果不理想的效果。这也是我们目前所要攻克的壁垒。但是,目前我们市场对的数据或者科研的数据并不是完全杂乱无章的,基本都是有规律可循的,因此,用模型算法去进行科学的分析,可以主观情绪对决策的影响。所以数据是非常重要的一部分。那么,接下来我们就详细说一下数据的处理与分析。一.数据的基本特征当看到数据的时候,首要做的并

  • 《书谱》(书法理论知识)

    ٩(๑•ㅂ•)۶  夫自古之善书者,汉魏有钟、张之绝,晋末称二王之妙。王羲之云:“顷寻诸名书,钟张信为绝伦,其余不足观。”可谓钟、张云没,而羲、献继之。又云:“吾书比之钟张,钟当抗行,或谓过之。张草犹当雁行。然张精熟,池水尽墨,假令寡人耽之若此,未必谢之。”此乃推张迈钟之意也。考其专擅,虽未果于前规;摭以兼通,故无惭于即事。  评者云:“彼之四贤,古今特绝;而今不逮古,古质而今研。”夫质以代兴,妍因俗易。虽书契之作,适以记言;而淳醨一迁,质文三变,驰鹜沿革,物理常然。贵能古不乖时,今不同弊,所谓“文质彬

  • bzero和memset哪个更耗时_malloc_trim

    bzero和memset哪个更耗时_malloc_trim 关于字符数组的初始化,在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号