DiscuzX2.5 帖子页面更新浏览量 缓存机制
2012-10-16 18:13
351 查看
DZ帖子页面处理脚本:source/module/forum/forum_viewthread.php
第一个if条件 是判断是否后台开启相关功能 $_G['setting']['preventrefresh'] 【查看数开启防刷新】
$_G['forum_thread']['addviews'] 主题查看数延迟缓存表 的addviews 浏览数
①如果addviews 小于100 把每次浏览数更新到 pre_forum_threadaddviews 延迟缓存表
②如果addviews 大于等于100时,把pre_forum_threadaddviews 缓存表的 addviews(浏览数) 累加到 thread帖子表内的浏览数字段。并把延迟缓存表的 addviews清空
解决问题:这样可以有效的防止 Mysql 因为频繁浏览页面 update 更新 views 的锁表 导致无法查询Mysql。大致处理逻辑是这样 ,具体的涉及函数 大家自行看下即可。
function viewthread_updateviews($tableid) { global $_G; if(!$_G['setting']['preventrefresh'] || $_G['cookie']['viewid'] != 'tid_'.$_G['tid']) { if(!$tableid && $_G['setting']['optimizeviews']) { if($_G['forum_thread']['addviews']) { if($_G['forum_thread']['addviews'] < 100) { //如果延迟更新浏览数 小于 100 更新延迟更新表 C::t('forum_threadaddviews')->update_by_tid($_G['tid']);//pre_forum_threadaddviews - 主题查看数延时更新表 addviews每次+1 } else { if(!discuz_process::islocked('update_thread_view')) { $row = C::t('forum_threadaddviews')->fetch($_G['tid']); C::t('forum_threadaddviews')->update($_G['tid'], array('addviews' => 0));//清空 延迟缓存表 C::t('forum_thread')->increase($_G['tid'], array('views' => $row['addviews']+1), true); discuz_process::unlock('update_thread_view');//进程解锁 } } } else {//如果延迟缓存表没有记录 则 insert 一条 C::t('forum_threadaddviews')->insert(array('tid' => $_G['tid'], 'addviews' => 1), false, true); } } else { C::t('forum_thread')->increase($_G['tid'], array('views' => 1), true, $tableid); } } dsetcookie('viewid', 'tid_'.$_G['tid']); }
第一个if条件 是判断是否后台开启相关功能 $_G['setting']['preventrefresh'] 【查看数开启防刷新】
$_G['forum_thread']['addviews'] 主题查看数延迟缓存表 的addviews 浏览数
①如果addviews 小于100 把每次浏览数更新到 pre_forum_threadaddviews 延迟缓存表
②如果addviews 大于等于100时,把pre_forum_threadaddviews 缓存表的 addviews(浏览数) 累加到 thread帖子表内的浏览数字段。并把延迟缓存表的 addviews清空
解决问题:这样可以有效的防止 Mysql 因为频繁浏览页面 update 更新 views 的锁表 导致无法查询Mysql。大致处理逻辑是这样 ,具体的涉及函数 大家自行看下即可。
相关文章推荐
- PHP页面静态化学习笔记之三:使用PHP缓存机制完成静态化
- 如何实现缓存系统的更新机制
- springboot+EHcache 实现文章浏览量的缓存和超时更新
- ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
- 静态页面设置缓存、动态页面设缓存(不断更新中。。。。)
- ie浏览器缓存不能更新页面数据
- ASP.Net 更新页面输出缓存的几种方法
- ASP.Net 更新页面输出缓存的几种方法
- IE中由于缓存导致页面数据不能及时更新的解决办法
- Asp.Net MVC 添加和更新页面缓存
- 如何实现缓存系统的更新机制
- ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
- apache 页面缓存机制,图片 缓存 (mod_expires)
- asp.net2.0缓存机制 SQL SERVER 技巧 页面常用知识
- linq to sql 更新缓存与自动更新机制
- 更新页面缓存OutputCache
- 如何实现缓存系统的更新机制
- 在动态页面里象静态页面一样控制整个网页的缓存和更新
- substitution控件:在页面输出缓存状态,保持部分数据的动态更新
- 如何实现缓存系统的更新机制