博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js~ioredis处理耗时请求时连接数瀑增
阅读量:6437 次
发布时间:2019-06-23

本文共 1679 字,大约阅读时间需要 5 分钟。

关于redis连接数过高的解释

对于node.js开发环境里,使用传统的redis或者使用ioredis都是不错的选择,而在处理大数据请求程中,偶尔出现了连接池( redis服务端的最大可用连接数,默认为1万)不够用的情况,一般的提示如下:

It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail

在redis-cli上输入info命令也可以进行查看

 redis-server.conf里配置了它默认的最大连接数

maxclients 10000

产生它的原因有几个:

  1. 单个请求使用结果后,没有释放,client.end()没有使用,这主要是redis组件
  2. 而使用了ioredis组件后,需要redis会自动释放,但时机也是http请求结束之后才执行,所以对于长时间没有响应的请求,也会出现占用redis线程的问题,解决方法手动使用redis.quit()即可
  3. 单个请求时间过长,导师redis连接一直被一个请求占用,而在请求数过多时,这种现象就会引用连接池不够用
  4. 多线程环境下(非node.js),使用了实例模块,而没有使用单例模式,因为很多redis驱动是支持多路复用的

大叔建议的作法:

减少单次请求的响应时间,建议把redis从一个大请求中拿出来,因为纯redis还是很快的

正确使用redis组件,用完就关了

正确理解多线程与socket连接,要知道socket连接直接影响你的服务器CPU性能

ioredis代码实例

ioredis是个好东西,它完全支持了redis的cluster,sentinal等新技术

new Redis()       // Connect to 127.0.0.1:6379new Redis(6380)   // 127.0.0.1:6380new Redis(6379, '192.168.1.1')        // 192.168.1.1:6379new Redis('/tmp/redis.sock')new Redis({  port: 6379,          // Redis port  host: '127.0.0.1',   // Redis host  family: 4,           // 4 (IPv4) or 6 (IPv6)  password: 'auth',  db: 0})

同时支持标准的字符连接串

// Connect to 127.0.0.1:6380, db 4, using password "authpassword":new Redis('redis://:authpassword@127.0.0.1:6380/4')

支持发布与订阅,它会存储在进程里,它不会被持久化,所有会有消息丢失的情况

var Redis = require('ioredis');var redis = new Redis();var pub = new Redis();redis.subscribe('news', 'music', function (err, count) {  // Now we are subscribed to both the 'news' and 'music' channels.  // `count` represents the number of channels we are currently subscribed to.  pub.publish('news', 'Hello world!');  pub.publish('music', 'Hello again!');});

好了,下次我们有时间去讲讲ioredis的具体操作!

感谢各位的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
android 40 Io编程
查看>>
编译器错误消息: CS0234: 命名空间“Purple”中不存在类型或命名空间名称“Model”(是否缺少程序集引用?)...
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(五)地图切换以及图层显示模块...
查看>>
STL之Vector(不定长数组)
查看>>
Python下科学计算包numpy和SciPy的安装【原创】
查看>>
I.MX6 android 设置 默认 动态桌面
查看>>
工作流数据库表设计-ASP.NET
查看>>
了解这23种设计模式
查看>>
linux程序调试命令strace
查看>>
代码中使用StoryBoard和DoubleAnimation的方法
查看>>
数据结构 线性表链式队列
查看>>
无法使用内置管理员账户打开Microsoft Edge
查看>>
EasyUI DataGrid编辑单元格时使用combogrid
查看>>
python oracle使用心得
查看>>
准备着手学习python
查看>>
OOP几大原则【转】
查看>>
ExtJs--09--javascript对象的方法的3种写法 prototype通过原型设置方法效率最好
查看>>
磁盘镜像工具Guymager
查看>>
Effective C++ 45-48
查看>>
maven setting.xml 配置(有效)
查看>>