redis的read error on connection错误解决
昨日,公司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上对应的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,可能需要进行全量同步。
redis的read error on connection错误解决的更多相关文章
- PHP程序连接Redis报read error on connection问题
线上PHP程序动不动就报PHP Fatal error: Uncaught RedisException: read error on connection错误,就是连接Redis在那么1秒钟有问题, ...
- mysql学习笔记1---mysql ERROR 1045 (28000): 错误解决办法
mysql ERROR 1045 (28000): 错误解决办法 在启动mysql服务后,登陆mysql的窗口的时候,执行mysql命令,结果报错,没法登陆. (在安装mysql和配置的时候,我是 ...
- Sub-process /usr/bin/dpkg returned an error code (1)错误解决办法
之前通过wine安装了一款软件,不经常用,也没有拆卸 可是之后呢,每次更新都要提示更新那个软件,更新的时候又总是找不到更新源 无奈之下,我通过软件中心移除wine,没想到竟然碰到依赖问题,没有拆卸成功 ...
- redis :read error on connection
最近做了一个多人竞拍的小功能 因为以前没做过 所以踩了很多坑用的是 mysql + php + redis 实现的竞拍功能 这里先说一下踩得第二个坑redis 的原因 真是欲哭无泪 解决完一个 ...
- mysql ERROR 1045 (28000): 错误解决办法
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 1045 (28000 ...
- 升级ionic版本后,创建新项目报Error Initializing app错误解决
命令行,进入项目路径后,运行 ionic start myApp --v2 命令执行后,报如下错误 Installing npm packages...Error with start undefin ...
- mysql登录时,ERROR 1045 (28000): 错误解决办法
错误问题的描述: ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 10 ...
- error C2039: 'SetDefaultDllDirectories'错误解决办法
使用VS2013+WDK8.1+Win7开发UMDF驱动,当使用了CComPtr类,包含了atlcomcli.h头文件却报错,错误如下: Error 3 error C2039: 'SetDefaul ...
- E: Sub-process /usr/bin/dpkg returned an error code (1)错误解决
在用apt-get安装软件时出现了类似于install-info: No dir file specified; try --help for more information.dpkg:处理 get ...
随机推荐
- SocketAsyncEventArgs里的AcceptSocket能独立存在吗?
独立存在是什么意思? 先来看一个例子.我们知道一个Socket对象(我们叫他ListenScoket)可以调用AcceptAsync并接受一个SocketAsyncEventArgs对象,如果操作成功 ...
- Redis 配置和使用
Redis的配置 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者me ...
- 我的Android进阶之旅------>如何将Activity变为半透明的对话框?
我的Android进阶之旅------>如何将Activity变为半透明的对话框?可以从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就可以将Acti ...
- RxJava2 源代码解析(一)
转载请标明出处: http://blog.csdn.net/zxt0601/article/details/61614799 本文出自:[张旭童的博客](http://blog.csdn.net/zx ...
- 2.Django命令行工具搭建项目(django-admin.py & manage.py)
1.概念: django-admin.py是django的用于管理任务的命令行工具 manage.py是对django-admin.py的简单包装,每个project里会有一个自己的manage.py ...
- 简易bootloader重定位问题
单板选择NandFlash启动,则硬件上电后,系统会自己主动将NandFlash中的前4K内容复制到STEPSTONE即4K SRAM中.然后从SRAM中的0X0地址启动. 基于mini ...
- Data Structure Binary Tree: Convert a given Binary Tree to Doubly Linked List
http://www.geeksforgeeks.org/in-place-convert-a-given-binary-tree-to-doubly-linked-list/ #include &l ...
- js之定时器
一.通过定时器我们可以间隔设定时间重复调用某个函数,利用这个特性,我们可以做很多事,例如,12306上的每间隔5秒查询自动查询一次余票,简单动画的实现等等 二.定时器的格式: 定时器有两种格式,分别是 ...
- [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Luogu-4196 [CQOI2006]凸多边形
凸多边形的面积就相当于半平面交 求几个凸多边形面积交就相当于一堆半平面一起求交 #include<cmath> #include<cstdio> #include<cst ...