問題
有個項目使用的mysql數據庫,第一次查詢很慢,大約15s左右出結果,再次查詢就很快了。
分析
后面變快的原因是mysql有緩存機制,但是過上一段時間不使用緩存會過期,我個人測了一下2~3分鍾一班不會過期,6~7分鍾就普遍過期了。
所以,是不是可以通過定時刷新查詢語句,來保持緩存的有效性呢?
測試了一下,是可以的。
解決方案
考慮到該項目本身查詢語句是固定的,大概10條,所以采取了一個取巧的解決方案。
即:
在服務器上放一個隱藏的網頁,每2分鍾刷新一次這10條語句。
這樣就能使mysql緩存不過期,從而保持相對快速的查詢速度。
代碼:
$(function () { //此頁面用來保持mysql的查詢緩存不過期,每隔2分鍾刷新一次,需要在服務器上打開該網頁,不能關閉。 //第一次加載 for (var i = 0; i < channelnameList.length; i++) { getContentList(channelnameList[i], idList[i]); } //定時加載 setInterval(function () { for (var i = 0; i < channelnameList.length; i++) { getContentList(channelnameList[i], idList[i]); } },1000*60*2); }); function getContentList(channelname, channelID) { //調用后台,進行mysql查詢 $.ajax({ type: "get", async: true, dataType: "text", url: "Handler.ashx?************, data: { ***********************) { }, success: function (data, textStatus) { //********************************************* // }, error: function () { } }); }
當然,用客戶端刷新效果一樣。
