Node.js~ioredis處理耗時請求時連接數瀑增

来源:http://www.cnblogs.com/lori/archive/2017/05/18/6871904.html
-Advertisement-
Play Games

回到目錄 關於redis連接數過高的解釋 對於node.js開發環境里,使用傳統的redis或者使用ioredis都是不錯的選擇,而在處理大數據請求程中,偶爾出現了連接池( redis服務端的最大可用連接數,預設為1萬)不夠用的情況,一般的提示如下: 在redis-cli上輸入info命令也可以進行 ...


回到目錄

關於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:6379
new Redis(6380)   // 127.0.0.1:6380
new Redis(6379, '192.168.1.1')        // 192.168.1.1:6379
new 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://:[email protected]: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的具體操作!

感謝各位的閱讀!

 回到目錄


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • activity_detail.xml 1.點擊收藏 2.社會化分享 ...
  • 1.獲得緩存大小和清除緩存 應用內數據的所有路徑: /data/data/com.xxx.xxx/cache - 應用內緩存(註:對應方法getCacheDir()) /data/data/com.xxx.xxx/databases - 應用內資料庫 /data/data/com.xxx.xxx/s ...
  • 文章參考自:http://www.runoob.com/w3cnote/android-tutorial-button-imagebutton.html Button是TextView的子類,所以TextView上很多屬性也可以應用到Button 上!我們實際開發中對於Button的,無非是對按鈕的 ...
  • 比較簡單的一個控制項,就是加些邏輯處理而已,以前貌似是直接監聽的,封裝起來方便點 public class AccountTxtView extends android.support.v7.widget.AppCompatEditText { private final char CUT = '-' ...
  • 點擊事件的必備條件:實現 介面,重寫 方法 以撥號簡單案例為例,如下圖效果: 邏輯流程: 1. 獲取點擊對象,獲取數據 2. 給對象設置監聽類 3. 實現 介面,重寫 方法 邏輯: 1. 獲取輸入內容:使用 對象的 方法,該方法返回值為 ,需要用 轉換成 類型 2. 判斷輸入是否為空, 方法判斷字元 ...
  • Origin: 目前在 debug 一隻手機 的 charger 部分, 手機的充電電流與預測有落差, 便想使用 vendor evb board 來驗證, 但是 Rsense 不一致, 便跑去零件行。 evb 上已有一顆 Rsense,但和手機相比,仍較小, 想說用並的, 於是 買了一顆 歐姆最接 ...
  • 上面的是修改UIAlertViewController的title和message字體的大小和顏色,採用的是修改attributedString其中的NSForegroundColorAttributeName顏色屬性和NSFontAttributeName字體大小屬性。UIAlertViewCon ...
  • 準備工作: 1.下載java sdk 配置好java 環境 2.下載android sdk 跟 android studio 並配置好環境 1.查看平臺支持,添加android平臺 首先命令提示符進入到所在項目文件夾下 查看系統所支持 的平臺 因為我已經配置好環境了,所以在這裡我們能看到 andro ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...