Discuz的缓存体系
参考文档:<http://dev.discuz.org/wiki/index.php?title=缓存机制>
Discuz中涉及数据缓存的地方有:
1. session Dz的session只保存了登陆状态,不是我们理解的保存整个会话状态的概念
2. cache
3. syscache
4. memory
我们通常意义上的缓存应该是对应到discuz的memory这一块,其他的三项可能是历史遗留问题,造成在使用时有较多的入口。
先说session,Discuz的session是完全独立的,存放在数据库表 - common_session中,使用时需以$discuz->session->set('lastolupdate', TIMESTAMP);形式调用。表结构与一般缓存的key -> value形式很大不同。
cache应该是最早的缓存机制,概念上应该有基于db和file的两种缓存机制,db模式数据默认放在数据表 - common_cache中,他的操作方式在source/class/db/cache_sql中有所体现,配置项为$_config['cache']['type'] = 'sql';, 但没有在代码中看到使用的地方,应该是被废弃了。file模式存放在data/cache下面,同样的,cache_file这个机制也应该是被废弃了,直接放到了函数库中。
syscache 是专门针对系统各项设置包括插件的参数进行集中缓存处理的机制,数据默认先存在数据表 - common_syscache中,然后在使用时存入到file中进行加速。所以他是一项特定的东西,但3.0以下file的存放目录为data/cache,与cache的file模式存放的目录相同,比较容易让初入门者迷惑。
memory中引入的机制,他的定义应该是能真正提高系统性能的缓存机制,如memcached、redis这类nosql的存储引擎。
结论:
经过分析后,发现cache 与 memory应该可以合并起来,即在source/class/memory目录(3.0)中加上file/db两种driver,将原来cache目录下的两个文件复制过来,简单的修改一下即可,同时function_core中对应的方法也要进行相应修改。
涉及cache操作的方法在function_core.php 与function_cache.php两个文件中。
functin_core.php:loadcache、cachedata;这里加载的指的是syscache,3.0中直接完全使用db的方式存放在common_syscache表中,放弃以前还要同步生成file缓存的做法。合并file、db两者引擎到memory中后,memory()应该就是日常缓存用户数据的唯一入口了,3.0以上由Core提供了全局mem对象。
function_cache.php:updatecache、writetocache 同样指的是syscache,writetocache方法应该是一个残留的函数,它的作用是写入指定的缓存内容到file cache中。
Discuz的缓存体系的更多相关文章
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进
由于我们同时开发多个大型应用系统同时系统有大量用户.高并发用户,平时访问系统的用户数量就有3万多人在线.需要对几十个系统进行持续优化改进,同时要增强信息系统的各种安全性. 如此多的系统.如此多的用户, ...
- Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践
一.缓存总览 Mybatis在设计上处处都有用到的缓存,而且Mybatis的缓存体系设计上遵循单一职责.开闭原则.高度解耦.及其精巧,充分的将缓存分层,其独到之处可以套用到很多类似的业务上.这里将主要 ...
- 闲谈关于discuz内核缓存机制
Discuz! 缓存 Discuz! X2.5 的 config_global.php 中有这样一行代码 $_config['cache']['type'] = 'sql'; 这就是 Discuz! ...
- Discuz!NT中集成Memcached分布式缓存
大约在两年前我写过一篇关于Discuz!NT缓存架构的文章,在那篇文章的结尾介绍了在IIS中如果开启多个应用程序池会造成多个缓存实例之间数据同步的问题.虽然给出了一个解决方案,但无形中却把压力转移到了 ...
- 企业做数据缓存是使用Memcached还是选Redis?
企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- MVC缓存
MVC入门系列教程-视频版本,已入驻51CTO学院,文本+视频学效果更好哦.视频链接地址如下: 点我查看视频.另外,针对该系列教程博主提供有偿技术支持,群号:226090960,群内会针对该教程的问题 ...
- Discuz插件开发中的困惑
1.关于缓存 这几天一直纠结于Discuz的缓存问题,今天终于有点小发现:首先Discuz的缓存可以通过数据库.文件等方式进行!在Discuz的配置文件config_global.php中有一个配置项 ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
随机推荐
- 学习之路三十六:SQL知识总结 - [游标||字符串分割]
好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...
- 桌面oracle 11g导入多年库的dump备忘
接到客户6G的dump文件.先导入桌面orcale ,imp提示出错,执行impdp后如下 连接到: Oracle Database 11g Express Edition Release 11.2. ...
- Base64的编码转换方式
下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上 ...
- 解决ubuntu解压zip文件名乱码的问题
1. 安装7-zip 和 convmv : 命令: sudo apt-get install convmv p7zip-full 2. 解压zip文件: 命令:LANG=C 7z e yourZIPf ...
- Spark1.0新特性-->Spark SQL
Spark1.0出来了,变化还是挺大的,文档比以前齐全了,RDD支持的操作比以前多了一些,Spark on yarn功能我居然跑通了.但是最最重要的就是多了一个Spark SQL的功能,它能对RDD进 ...
- ACE代码编辑器,代码提示,添加自定义数据
//设置自动提示代码 var setCompleteData = function(data) { var langTools = ace.require("ace/ext/language ...
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...
- myeclipse不编译解决方法
在开发中经常遇到myeclipse不编译的情况,但不同情况的解决方法又不一样,今天同样是遇到此类情况,在网上狂搜,终于找到一篇好文,它囊括了解决这种情况的常用的方法,现在发出来与大家分享.我遇到的情况 ...
- LevelDB(v1.3) 源码阅读之 Arena(内存管理器)
LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...
- 【Android】Activity生命周期(亲测)
测试手机:Nexus 5 系统:4.4 一.测试 测试代码: package com.example.androidalarm; import android.app.Activity; impo ...