因为node.js内部使用libuv实现网络io调用(使用epoll),在socket层面是不能设置read timeout,connection timeout,write timeout。

所以node.js api中net模块只暴露了socket.setTimeout ,用于在tcp通信空闲时间超过设置的值,所触发的事件;而ioredis在connectTimeout只在初始化socket连接时启用,连接成功后空闲超时是没有启用的。

可以通过https://github.com/luin/ioredis/blob/master/lib/redis.js#L301 查看:

if (options.connectTimeout) {/** Typically, Socket#setTimeout(0) will clear the timer* set before. However, in some platforms (Electron 3.x~4.x),* the timer will not be cleared. So we introduce a variable here.** See https://github.com/electron/electron/issues/14915*/var connectTimeoutCleared = false;stream.setTimeout(options.connectTimeout, function () {if (connectTimeoutCleared) {return;}stream.setTimeout(0);stream.destroy();var err = new Error('connect ETIMEDOUT');err.errorno = 'ETIMEDOUT';err.code = 'ETIMEDOUT';err.syscall = 'connect';eventHandler.errorHandler(_this)(err);});/* 只要触发一次 CONNECT_EVENT(connect) 事件setTimeout空闲过期时间就会改为0,即禁用空闲超时  */stream.once(CONNECT_EVENT, function () {connectTimeoutCleared = true;stream.setTimeout(0);});}

ioredis没有实现连接池,但使用了node.js内部的epoll,并且ioredis实现了pipeline方式,所以性能上应该不会太差,但如果发送的命令阻塞redis或者使用wait这种命令(阻塞session级别)会使只要调用redis的router(await redis)都会被阻塞(等待数据返回),这一点要注意。

Node.js当中的ioredis设置timeout的问题相关推荐

  1. Node.js: redis 和 ioredis 的基本使用

    Node.js : redis 和 ioredis 的基本使用 前言 正文 redie的安装和使用 ioredie的使用 封装所需要用到的ioredis方法 前言 此篇内容记录本人编程过程中所遇到的一 ...

  2. node.js当中net模块的简单应用(基于控制台的点对点通信)

    我们可以使用node.js当中内置的net模块来创建socket服务端和socket客户端,实现一个简单的基于控制台的点对点通信. 一.利用net模块建立socket客户端 1.引包 const ne ...

  3. 一、node.js的windows环境设置

    第一次接触node.js的时候,还不能在window环境下运行,好不容易找到cygwin搭建了个运行环境,发现版本更新频繁不稳定,就没有耐心去看 最近工作刚忙完,又想起node.js,而且现在版本稳定 ...

  4. Node.js Web开发_设置Node.js(1)

    电子书推荐 Multithreaded JavaScript: Concurrency Beyond the Event Loop Computers For Seniors For Dummies, ...

  5. 使用node.js进行API自动化回归测试

    概述 传统的QA自动化测试通常是基于GUI的,比如使用Selenium,模拟用户在界面上操作.但GUI测试的开发.维护成本和运行的稳定性一直是测试界的老大难问题.投入大量的人力物力开发.维护.运行,却 ...

  6. 要取代 Node.js 的 Deno 还活着吗?

    作者 | Fernando Doglio 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 早在 2020 年 5 月,我就写了一篇介绍 Deno 的文章,后来还写了一本书.我喜欢 Den ...

  7. 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈

    本教程介绍如何在 Azure 中的 Linux VM 上实现 MongoDB.Express.AngularJS 和 Node.js (MEAN) 堆栈. 通过创建的 MEAN 堆栈,可以在数据库中添 ...

  8. Node.js 笔记01

    一.Node.js 前言 1.node.js 之父 Ryan Dahl(瑞安达尔) ,技术好,颜值高! 数学系博士, 中途退学, 为了生活, 学习了Ruby On Rails接Web项目, 经过两年成 ...

  9. Node.js server使用

    一.创建项目 #创建项目目录 cd /data mkdir webroot cd webroot#初始化git git init vim .gitignore 输入: node_modules/ 保存 ...

最新文章

  1. yii mailer 扩展发送邮件
  2. 《JavaScript高级程序设计》阅读笔记(二):ECMAScript中的原始类型
  3. mac mysql 连接超时时间设置_MAC下mysql安装连接问题
  4. 最短路---dijsktra--邻接矩阵
  5. 基于InkCanvas实现的桌面涂鸦工具-[ WPF开发 ]
  6. 【案例】数据量猛增,BI分析效率太低怎么破?
  7. ecshop 全站内页 显示最新文章
  8. Java安全 – JCE (Blowfish算法报错)
  9. c语言如何限制数字大小下线,C语言学习Day19
  10. 既然Java反射可以访问和修改私有成员变量,那封装成private还有什么意义
  11. [30期] 第一个项目总结-—数码黑店在这一年开张
  12. 软考高项-信息系统项目管理师-精华笔记
  13. android 滑动tabhost,tabhost左右滑动按钮
  14. AutoCAD 2007快捷键大全
  15. IEEE模板如何在abstract和keywords之间加一个段落Note to Practitioners
  16. 语音机器人在人工智能领域的发展
  17. 关于pdms中设备参数模板的更新PML代码
  18. P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。
  19. 如何从阿里云官方镜像站下载centos并安装
  20. JS轮播图(网易云轮播图)

热门文章

  1. 机械过滤器(石英砂过滤器)和多介质过滤器的区别
  2. android开发沉浸式标题栏_android实现沉浸式状态栏
  3. protobuf在网络编程中的应用思考
  4. android自动生成dimens适配文件
  5. 想成为硬件工程师,难不?
  6. 阿里员工离职换来一条血泪教训:以为当小白兔很安全,是你对职场最大的误解
  7. 关于HTML5的新特性
  8. 五年级上册计算机教学工作计划,小学五年级上册信息技术教学工作计划(精选5篇)...
  9. Codeforces 1278 B. A and B (思维题)
  10. 【java毕业设计】基于javaEE+SSH+SqlServer的企业车辆管理系统设计与实现(毕业论文+程序源码)——车辆管理系统