node 使用 redis 來快取數據,需要每次請求都建立連結嗎?
PHP中文网
PHP中文网 2017-04-24 09:11:02
0
3
778

目的:使用redis來快取網站的固定內容資料在node開啟的時候

遇到的問題:

var redis = require('redis'),
    client = redis.createClient();
    
client.hset([hash, hashtest, value],function(err,reply){
               callback(err,reply);
               // client.quit();
});

client.hget([hash,hashtest],function(err,reply){
               callback(err,reply);
               // client.quit();
})

每次在請求完成以後是否需要client.quit 關閉鏈接,然後在請求的時候再次createClient 鏈接呢? ?

PHP中文网
PHP中文网

认证0级讲师

全部回覆(3)
阿神

在設定檔中有兩個設定與此相關:
maxclients用來設定支援的最大客戶端連接,超過了就拒絕;這來設定你的redis客戶端能夠同時支援多少連接;(當然,除了這個值,還需要看linux系統的limit設定)
timeout 超時設置,用來設定一個用戶連接之後,多長之內沒有觸發redis請求,就從伺服器端主動關閉這個連接,以節省系統資源;

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 10000
# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

對於redis的連線要求,一般有以下兩種場景設定:

  1. 觸發用戶請求的server有限(例如100個以內),這就可以將timeout 設為0,這樣redis連線請求永遠有效,連線一次後不再斷開;只在服務重新啟動或出錯後重連;

  2. 大量用戶數並發請求,這種情況,可以將timeout 設定在幾分鐘之內(根據業務來確定),而客戶端連接以後後不主動關閉連接,在發現連接被關閉(由於超時被伺服器關閉)後再請求連線;

洪涛

好像自備連接池吧

阿神

不建議每個請求都重新連接一次。只會浪費建立連結所花費的時間。比較好的是在每個model建立一次連結(createClient)後一直保持著就好了。因為redis單執行緒處理的特性,所以連線池本身對redis是沒什麼用處的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板