设为首页 收藏本站
查看: 1252|回复: 0

[经验分享] node-redis模块需要注意的事项

[复制链接]

尚未签到

发表于 2015-7-22 13:24:59 | 显示全部楼层 |阅读模式
  node之中连接redis使用的redis模块,虽然好用,但是有些地方还是需要注意。
  npm install redis
  
  redis client 行为:
1、客户端执行过程中断网的情况
  由于原本连接正常,断网后socket无法主动检测到,因此TCP进入不断的重传,ubuntu系统大概在1000秒左右返回ETIMEOUT。
  由于redis客户端没有等待回复超时时间,所以会等待到TCP超时才最终导致超时。
2、重连接机制:当服务端异常断开会导致重连接,而若是客户端主动断开则不会重连接
  如下两种情况表示客户端主动断开:
    1)向服务端发送quit命令
    2)调用客户端类的end函数
  重连接选项:
    max_attempts:重试次数,默认无限制
    retry_max_delay:两次重连接之间有一个延迟,默认按照指数避退原则不断增加,这个数值设置延迟的最大值
    connect_timeout:连接的超时时间(包括重连接),也就是若设置这个参数,达到这个值后就不会重连接(在这个时间内会按照重连接规则进行多次尝试,直到时间用尽)
3、设置client.stream.setTimeout这种方式,对于不断向服务器发送命令的应用无效
  因为sock的timeout表示空闲超时,只有在发送与接收都没有数据时才计入空闲时间,
  而由于应用不断向服务端发送命令,也就是在发送上是处于忙状态,不能记录为空闲。
  4、关于end事件
  使用redisClient.quit()向服务端发送quit命令,服务端关闭连接,redis客户端能够收到end事件通知。
  使用redisClient.end()函数主动关闭连接时,redis客户端不会收到end事件通知。
  原因:
    redisClient.end()函数体中有一条语句
    this.stream._events = {};  //将socket连接上注册的所有事件清空
    由于redisClient上的事件是基于socket事件的,当socket事件清空后,redisClient本身也就无法触发任何事件了。
    延伸:socket的end事件触发时机:当读取到一个EOF时触发,因此若没有注册data事件(监控数据可读),也就不会有end事件。
    socket的close在被关闭时触发,因此只要不是极端的清除所有的注册事件,都可以收到该事件通知。
5、关于redisClient的命令队列与离线队列
  命令队列offline_queue:
  当前连接可用时客户端会将命令不断发出去,每出去一个在队列末尾添加一项,收到一个回复从队列头部删除一项。因此当应用使用多个连接时可能会出现,A连接执行set命令,B连接去查询为空,那是由于A连接上的set命令还在队列里等待redis执行。
  长度查询:client.command_queue.length
  离线队列offline_queue:
  当前连接不可用时,客户端会将命令放置到离线队列之中,同时重连接规则尝试连接服务器,每次尝试失败都会清空离线队列。
  长度查询:client.offline_queue.length
  可使用enable_offline_queue:false选项关闭该功能。
6、错误时的回调
  若在执行命令中设置了回调函数,当有异常时这个回调会先被调用,然后触发error事件。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-89512-1-1.html 上篇帖子: Ubuntu下PHP开发配置(新增redis、sphinx、sqlserver相关配置) 下篇帖子: redis pub/sub 发布订阅
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表