问题
有个项目使用的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 () { } }); }
当然,用客户端刷新效果一样。