Discuz!大师网

搜索
查看: 1273|回复: 0

Discuz!中最高在线人数更新和存储机制详解以及如何修改最高在线人数

[复制链接]
发表于 2017-3-30 19:55:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
模板文件 \template\default\forum\discuz.htm
显示历史最高在线人数的代码为:
{lang index_mostonlines} <strong>$onlineinfo[0]</strong> {lang on} <strong>$onlineinfo[1]</strong>.</span>
即 最高记录是 xx 于 YYYY-MM-DD
这里在线记录信息存储于数组$onlineinfo
那么数组$onlineinfo怎么来的呢,来看看论坛首页的业务逻辑文件:
\source\module\forum\forum_index.php
看看如下代码
$onlineinfo = explode("\t", $_G['cache']['onlinerecord']);
if(empty($_G['cookie']['onlineusernum'])) {
        $onlinenum = C::app()->session->count();
        if($onlinenum > $onlineinfo[0]) {
                $onlinerecord = "$onlinenum\t".TIMESTAMP;
                C::t('common_setting')->update('onlinerecord', $onlinerecord);
                savecache('onlinerecord', $onlinerecord);
                $onlineinfo = array($onlinenum, TIMESTAMP);
        }
        dsetcookie('onlineusernum', intval($onlinenum), 300);
} else {
        $onlinenum = intval($_G['cookie']['onlineusernum']);
}
$onlineinfo[1] = dgmdate($onlineinfo[1], 'd');
这里首先从缓存$_G['cache']['onlinerecord']中读取数据复制给数组$onlineinfo;
然后判断当前在线人数是否超过历史最高,如果超过了则更新,注意看代码:
C::t('common_setting')->update('onlinerecord', $onlinerecord);
由此我们看到历史最高数据存储在数据表pre_common_setting中skey='onlinerecord'
这里顺便说一下缓存数据$_G['cache']['onlinerecord']存储于数据表pre_common_syscache中cname='onlinerecord'
关于缓存的读取参考\source\function\function_core.php中的savecache和loadcache函数,这里就不再详述了;

总结一下
历史最高在线人数存储于数据表pre_common_setting中skey='onlinerecord';
discuz系统每次更新的时候会自动更新缓存$_G['cache']['onlinerecord'];
显示的时候直接从缓存中读取数据;
因此懂得mysql操作的朋友只需要修改数据表pre_common_setting中skey='onlinerecord'的svalue值然后在后台强制更新缓存即可达到修改历史最高在线人数的目的;

回复 马甲回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|网站地图|小黑屋|展会网|Discuz站长论坛 |天天打卡

GMT+8, 2024-4-27 20:05 , Processed in 0.022833 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表