node.js結合redis+mysql

mysql大家都知道是什麼,數據庫,就不怎麼簡介了,redis當你的服務器訪問量比較大的時候或者說想讓你的速度訪問更快的時候,你就要用到redis進行緩存,好處就是別人請求的都是你緩存的數據,你只需要定時的向mysql調用數據即可,避免了大量用戶訪問的時候頻繁的對數據庫進行select查找,減輕了服務器的壓力。

用的時候記得下載redis和redis可視化工具,啓動redis  server;

redis可視化工具幫助開發,觀察是否設置成功;

redis配置:

RDS_PORT = 6379,        //端口號
RDS_HOST = '192.168.1.101',    //服務器IP
RDS_OPTS = {},            //設置項
client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);
client.on('ready',function(err){
	if(err){
		console.log(err)
		client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);
	}
	console.log('ready')
})

因爲部署到正式環境跟生產環境是不一樣的,所以你需要進行報錯處理,防止中斷:

client.on("error", function (err) {
   report('RedisError');
   logger.error("Error " + err);
});

var client = redis.createClient({
    retry_strategy: function (options) {
        if (options.error.code === 'ECONNREFUSED') {
            // End reconnecting on a specific error and flush all commands with a individual error 
            report('連接被拒絕');
        }
        if (options.times_connected > 10) {
            report('重試連接超過十次');        
        }
        // reconnect after 
        return Math.max(options.attempt * 100, 3000);
    }
});
function uncaughtExceptionHandler(err){
    if(err && err.code == 'ECONNREFUSED'){
        client = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);
    }else{
        process.exit(1);
    }
}
process.on('uncaughtException', uncaughtExceptionHandler);

具體的操作指令可參考:點擊打開鏈接

其實大部分就只用到了set,如:

client.select('4',function(error){

	if(error) {
	console.log(error);
		} else {
		client.set(id, JSON.stringify(rows));
			}
})	

4就是redis第幾個庫,我記得好像一共有十幾個的吧;打開可視化工具就能看到

然後你在寫api的時候就可以,去get請求了:

client.select('4',function(error){
		if(error){
			console.log(error)
		}else{
			client.get(id,function(err,data){
			 	res.send(JSON.parse(data))
			})	
		}
	})

還有用的比較多的就是hset,區別就是多了一個對應的key ,以及redis設置過期時間等等我就不列舉了;

mysql:

mysql網上的教程也有很多,我在這裏重點講一下mysql如何處理部署服務器上報錯重連,以及如何減輕服務器壓力的問題。

首先要封裝一個函數的形式function handleError () ,在內部鏈接的時候如果報錯就進行重新執行該函數:


在函數結尾再監聽一下報錯:


如果跟數據庫長連的話,這樣一般會導致一個問題,就是你每次報錯,都要去重新去連接數據庫,一般時間久了,它會一直重新相當於無限的進行重新打開一個鏈接,這也是我之前碰到的一個坑,也是一個很重要的性能優化,把服務器負擔搞得壓力很大。解決辦法就是;

conn.release();

釋放;

一般部署服務器也用到了forever,用它進行守護進程。npm i forever -g安裝完畢,直接去監聽www文件就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章