Emlog调用数据库加速显示标签tag缓存优化方法

长风化羽 2022-11-2

1449 30
签名:这个人很懒,什么也没有留下!
最新回复 (30)
  • dfdf 2022-11-7
    11
    666
    签名:这个人很懒,什么也没有留下!
  • 初音酱 2022-11-7
    10
    楼主好人
    签名:这个人很懒,什么也没有留下!
  • blind8 2022-11-7
    9
    哈哈,不错哦
    签名:这个人很懒,什么也没有留下!
  • heiyanshoot 2022-11-7
    8
    赞!
    签名:这个人很懒,什么也没有留下!
  • 光耀百花 2022-11-7
    7
    太强了
    签名:这个人很懒,什么也没有留下!
  • 问剑孤鸿 2022-11-7
    6
    666,牛
    签名:这个人很懒,什么也没有留下!
  • z134 2022-11-7
    5
    感谢分享
    签名:这个人很懒,什么也没有留下!
  • kkne 2022-11-6
    4
    666,牛
    签名:这个人很懒,什么也没有留下!
  • 15129313936 2022-11-6
    3
    谢谢
    签名:这个人很懒,什么也没有留下!
  • azy 2022-11-3
    2
    谢谢
    签名:这个人很懒,什么也没有留下!
  • 长风化羽 2022-11-2
    1

    站长亲测Emlog文章标签缓存改为调用数据库代码挺好,站长在文章添页添加文章标签的时候发现修复标签缓存问题后,如果emlog的标签数量较大时,程序缓存的标签文件非常大,如果标签有很多甚至有可能达到几十兆,这明显是自己在给服务器施加压力。

    如果在模板中添加了调用文章标签代码,每次进入文章页或者进入添加了文章标签代码的页面会非常卡,原因就是服务器需要去那个有可能几十兆的标签缓存文件中获取此文章的标签,每次访问服务器都要访问如此之大的文件,普通服务器怎么可能吃得消呢?

    相信各位站长在数据量大的时候也会发现emlog程序在偷偷变卡吧?但是不知道是什么原因,刀云网在这里告诉大家就是这个原因,下面教大家是怎么解决的。

    站长的解决办法就是将emlog程序自带的从缓存获取文章标签的代码废除,在模板中增加代码来解决,原理就是让大家每访问一个文章时就去数据库中查询一次标签,这样可以大大减少服务器的压力,觉得还是本地缓存调用比较快,但是经过测试证明,还是调用数据库比较快,这点针对国外服务器有着很好的效果,大家不妨试一试。

    操作步骤

    1、首先找到此文件:根目录/include/lib/cache.php,将以下代码注释掉;

    private function mc_logtags() {
     $query = $this->db->query("SELECT gid FROM " . DB_PREFIX . "blog where type='blog'");
     $log_cache_tags = array();
     while ($row = $this->db->fetch_array($query)) {
     $logid = $row['gid'];
     $tags = array();
     $tquery = "SELECT tagname,tid FROM " . DB_PREFIX . "tag WHERE gid LIKE '%,$logid,%' or gid LIKE '%,$logid%' or gid LIKE '%$logid,%' or gid LIKE '$logid'";
     $result = $this->db->query($tquery);
     while ($trow = $this->db->fetch_array($result)) {
     $trow['tagurl'] = urlencode($trow['tagname']);
     $trow['tagname'] = htmlspecialchars($trow['tagname']);
     $trow['tid'] = intval($trow['tid']);
     $tags[] = $trow;
     }
     $log_cache_tags[$logid] = $tags;
     unset($tags);
     }
     $cacheData = serialize($log_cache_tags);
     $this->cacheWrite($cacheData, 'logtags');
     }

    2、根目录:模板目录中的文件 /content/templates/模板文件夹名/module.php;

    <?php
    //blog:文章标签
    function Tea_blog_tag($blogid){
     //调用数据库版标签
     $db = MySql::getInstance();
     $query = $db->query("SELECT gid FROM ".DB_PREFIX."blog where type='blog' and gid='".$blogid."'");
     while($row = $db->fetch_array($query)){
     $logid = $row['gid'];
     $tags = array();
     $tquery = "SELECT tagname,tid FROM " . DB_PREFIX . "tag WHERE gid LIKE '%,".$logid.",%' or gid LIKE '%,".$logid."' or gid LIKE '".$logid.",%' or gid LIKE '".$logid."'" ;
     $result = $db->query($tquery);
     while ($trow = $db->fetch_array($result)) {
     $trow['tagurl'] = urlencode($trow['tagname']);
     $trow['tagname'] = htmlspecialchars($trow['tagname']);
     $trow['tid'] = intval($trow['tid']);
     $tags[] = $trow;
     }
     }
     if(!empty($tags)){
     foreach ($tags as $value){
     echo '<a href="'.Url::tag($value['tagurl']).'" title="'.$value['tagname'].'">'.$value['tagname'].'</a>';
     }
     }else{
     echo '<a>无标签</a>';
     }
    }
    ?>

    3、以上工作完成后,在你想要添加文章标签的地方添加代码:

    <?php Tea_blog_tag($logid);/*$logid*/?>
    签名:这个人很懒,什么也没有留下!
返回