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,可能需要进行全量同步。

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

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

(0)
上一篇 2021年10月27日 下午12:00
下一篇 2021年10月27日 下午1:00


相关推荐

  • shell脚本语言(超全超详细)[通俗易懂]

    shell脚本语言(超全超详细)[通俗易懂]shell脚本语言1、shell的概述2、脚本的调用形式打开终端时系统自动调用:/etc/profile或~/.bashrc3、shell语法初识3.1、定义以开头:#!/bin/bash3.2、单个”#”号代表注释当前行第一步:编写脚本文件第二步:加上可执行权限第三步:运行三种执行方式(./xxx.shbashxxx.sh.xxx.sh)./xxx.sh…

    2022年7月11日
    21
  • win10部署openclaw以及配置局域网访问

    win10部署openclaw以及配置局域网访问

    2026年3月13日
    3
  • Python攻防-暴力激活成功教程附近局域网WIFI密码「建议收藏」

    Python攻防-暴力激活成功教程附近局域网WIFI密码「建议收藏」文章目录前言无图形界面WIFI爆破脚本优化图形化界面简单版UIUI升级版总结前言本文将记录学习下如何通过Python脚本实现WIFI密码的暴力激活成功教程,从而实现免费蹭网。无图形界面先来看看没有图形界面版的爆破脚本。WIFI爆破importpywififrompywifiimportconstimporttimeimportdatetime#测试连接,返回链接结果defwifiConnect(pwd):#抓取网卡接口wifi=pywifi

    2022年8月22日
    11
  • MySQL详解--锁

    MySQL详解--锁锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL

    2022年6月6日
    38
  • Android listView中的button点击事件[通俗易懂]

    Android listView中的button点击事件[通俗易懂]Android–listView中的button控件获取item的值在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件,这方面的介绍网上很多,我想大家应该很熟悉了,之前做项目开发的时候遇到了一个问题,就是如果我点击listitem中的button怎么才能这个button是在哪一个item中呢,换句话说,就是点击listitem中的button怎么获取该list

    2022年7月17日
    27
  • 详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)

    详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)详解CAP定理Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性)CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),三者不可得兼。分布式系统(distributedsystem)正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态如何同步。CAP定理是.

    2022年7月25日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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