应用redis读取报错_使用了twemproxy不支持的命令


2017-11-22

架构:lvs-twemproxy-redis

应用redis读取报错如下:


2017/11/20 16:18:44 [error] [ exception.RedisException ] exception 'RedisException' with message 'read error on connection' in /opt/tuniu/www/html/BAOKUAN/protected/extensions/CRedisCache.php:73
Stack trace:
#0 /opt/tuniu/www/html/BAOKUAN/protected/extensions/CRedisCache.php(73): Redis->hGet('a660ec3929e996f...', 'departCity_1602')


网上的方法:
最近一个后台常驻job通过redis的brpop阻塞读取消息时,设置的超时时间较长
list($key,$row)=$redis->brPop($queue_name,3600);//超时时间为1小时
但是在实际的使用中发现很短时间后就会退出,通过查看error log,发现:'RedisException' with message 'read error on connection'提示
经过一番折腾,原来发现是php.ini文件中的一个配置项导致:
default_socket_timeout = 60
由于redis扩展也是基于php 的socket方式实现,因此该参数值同样会起作用。
找到了问题就比较好解决了:
1、直接修改php.ini,将其设置为我们想要的值(这个不推荐)
2、在我们的脚本中通过以下方式设置,这样就比较灵活,不对其他脚本产生影响
ini_set('default_socket_timeout', -1);//不超时


研发加了 timeout的设置(   ini_set('default_socket_timeout', -1) ) ,报错的几率变小了,但还是偶尔有  

检查发现twemproxy日志中有如下报错:使用了不支持的命令SELECT
[2017-11-20 18:35:22.928] nc_redis.c:1098 parsed unsupported command 'SELECT'
[2017-11-20 18:35:23.935] nc_redis.c:1098 parsed unsupported command 'SELECT'
[2017-11-20 18:35:33.828] nc_redis.c:1098 parsed unsupported command 'SELECT'
[2017-11-20 18:35:34.588] nc_redis.c:1098 parsed unsupported command 'SELECT'
[2017-11-20 18:35:35.191] nc_redis.c:1098 parsed unsupported command 'SELECT'


同一时间应用的报错
2017/11/20 18:35:22[error][application]read error on connection
2017/11/20 18:35:22[error][application]read error on connection
2017/11/20 18:35:23[error][application]read error on connection
2017/11/20 18:35:33[error][application]read error on connection
2017/11/20 18:35:34[error][application]read error on connection


问题定位:为应用代码使用了不支持的命令。

问题解决:停止使用不支持的命令。


代码改进:
array('host'=>' xx-xxxxxx-master.redis.xxx.org ', 'port'=>6381, ),
array('host'=>' xx-xxx-master.redis.xxx.org ', 'port'=>26761, ),
应用使用了两套缓存,一套是直连的(支持select),一套是twemproxy的(不支持select),在使用的过程增加判断,当端口不等于6381的时候,停止使用select。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值