参考文档:<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的缓存体系的更多相关文章

  1. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进

    由于我们同时开发多个大型应用系统同时系统有大量用户.高并发用户,平时访问系统的用户数量就有3万多人在线.需要对几十个系统进行持续优化改进,同时要增强信息系统的各种安全性. 如此多的系统.如此多的用户, ...

  2. Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践

    一.缓存总览 Mybatis在设计上处处都有用到的缓存,而且Mybatis的缓存体系设计上遵循单一职责.开闭原则.高度解耦.及其精巧,充分的将缓存分层,其独到之处可以套用到很多类似的业务上.这里将主要 ...

  3. 闲谈关于discuz内核缓存机制

    Discuz! 缓存 Discuz! X2.5 的 config_global.php 中有这样一行代码 $_config['cache']['type'] = 'sql'; 这就是 Discuz! ...

  4. Discuz!NT中集成Memcached分布式缓存

    大约在两年前我写过一篇关于Discuz!NT缓存架构的文章,在那篇文章的结尾介绍了在IIS中如果开启多个应用程序池会造成多个缓存实例之间数据同步的问题.虽然给出了一个解决方案,但无形中却把压力转移到了 ...

  5. 企业做数据缓存是使用Memcached还是选Redis?

    企业是使用Memcached还是选Redis? 在构建一款现代且由数据库驱动的Web应用程序并希望使其拥有更为出色的性能表现时,这个问题总会时不时出现.并给每一位开发人员带来困扰.在考虑对应用程序的性 ...

  6. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...

  7. MVC缓存

    MVC入门系列教程-视频版本,已入驻51CTO学院,文本+视频学效果更好哦.视频链接地址如下: 点我查看视频.另外,针对该系列教程博主提供有偿技术支持,群号:226090960,群内会针对该教程的问题 ...

  8. Discuz插件开发中的困惑

    1.关于缓存 这几天一直纠结于Discuz的缓存问题,今天终于有点小发现:首先Discuz的缓存可以通过数据库.文件等方式进行!在Discuz的配置文件config_global.php中有一个配置项 ...

  9. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...

随机推荐

  1. mysql用shell建100多字段表并导入

    excel列超过160多个,导入时报错,把excel第一行另存为逗号分隔的csv文件,用shell建表 vim createTable.sh #!/bin/sh str="CA6430M,H ...

  2. 搬家至个人独立博客virson.cn

    最近正在将博客园的文章搬到自己的独立博客,以后基本上不会在博客园更新文章了,欢迎光临我的新博客:www.virson.cn,博客内容持续更新中……

  3. 关于Android真机调测Profiler

    U3D中的Profile也是可以直接在链接安卓设备运行游戏下查看的,导出真机链接U3D的Profile看数据,这样能更好的测试具体原因.   大概看了下官方的做法,看了几张帖子顺带把做法记录下来.   ...

  4. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  5. 何为.Net Remoting【转】

    借助基维百科给它的定义如下: NET Remoting 是微软 .NET Framework 中的一种网络通讯技术,与 XML Web Service 不同的是,它可以使用 SOAP 以外的协定来通讯 ...

  6. Android那些事儿之LBS定位,实践测试lbs

    最近一朋友让我了解下安卓LBS获取位置信息,于是动手实践了一把.搜了一圈发现有篇博文可以参考:Android那些事儿之LBS定位,但是原文作者没有提供源码下载,于是动手实现了,现记录下来备忘,代码附在 ...

  7. 快乐的JS正则表达式(一)

    上一篇介绍了为什么需要正则,那从这一篇开始我们就去学习如何使用正则. 在js中有两种方式创建正则表达式: var reg = new RegExp("表达式","可选规则 ...

  8. 深入理解javascript事件

    .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier ...

  9. Oracle 给已创建的表增加自增长列

    对于已经创建的表,在特殊需求下,需要增加一个自增长列步骤: --1. 增加 自增长列 ); --2. 程序方式更新设置 IdNum 列 值 --3.查询最大 ) From Limsbusinessen ...

  10. Xcode-Xcode 7.3 解决不能自动联想问题

    一.问题: 升级Xcode 7.3 之后发现导入头文件之后,没法自动联想. 二. 解决办法: 打开Xcode --> Target --> BuildSettings --> App ...