问题

  有个项目使用的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 () {
                 
            }
        });
    }

 

    当然,用客户端刷新效果一样。

posted on 2021-05-18 16:26  十行道人  阅读(3284)  评论(0编辑  收藏  举报