目的:使用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 鏈接呢? ?
在設定檔中有兩個設定與此相關:
maxclients用來設定支援的最大客戶端連接,超過了就拒絕;這來設定你的redis客戶端能夠同時支援多少連接;(當然,除了這個值,還需要看linux系統的limit設定)
timeout 超時設置,用來設定一個用戶連接之後,多長之內沒有觸發redis請求,就從伺服器端主動關閉這個連接,以節省系統資源;
對於redis的連線要求,一般有以下兩種場景設定:
觸發用戶請求的server有限(例如100個以內),這就可以將timeout 設為0,這樣redis連線請求永遠有效,連線一次後不再斷開;只在服務重新啟動或出錯後重連;
大量用戶數並發請求,這種情況,可以將timeout 設定在幾分鐘之內(根據業務來確定),而客戶端連接以後後不主動關閉連接,在發現連接被關閉(由於超時被伺服器關閉)後再請求連線;
好像自備連接池吧
不建議每個請求都重新連接一次。只會浪費建立連結所花費的時間。比較好的是在每個model建立一次連結(createClient)後一直保持著就好了。因為redis單執行緒處理的特性,所以連線池本身對redis是沒什麼用處的。