Discuz!X2内存缓存机制提高性能分析

Discuz X中,缓存核心函数在function_core.php和function_cache.php中。其中以updatecache和loadcache两个函数最为核心。弄清楚了这两个函数之后,完全能剥离出来自己用,或者仿它的写法自己创建缓存了。

这里简单叙述一下X里面,缓存的机制。
X的缓存,主要是存储不经常变动的数据,存储方式可以选择数据库,或者文件。下面举例说明。我们可以在后台的admincp_click.php,看到updatecache(‘click’),证明click是使用了缓存机制的。Click就是表态图标,头像什么的信息,路过,雷人,鸡蛋等等,这些信息是​基本不修改的,并且会在前台很多地方用到。而如果不使用缓存的话,则每次都需要遍历一次click表,而如果有100个表态图像的话则会读100次库,每篇日志都会有cl​ick信息,如果有100篇日志则会读click表10000次。

X的做法就是,把类似click表的内容,序列化,存放在common_syscache表中,这样每次只需要读一次库,或者存放在文件中,每次都读这个文件。下面我们详​细看看代码是怎么运行的。我们这里模拟一个需要缓存的表message,只有两个字段,subject和content。当然message这样的经常更新的数据是不适合​缓存的,这里只是举例方便。

这里看看getcachearray()代码

看看save_syscache()是干嘛的。

总结一下updatecache()的作用,读原始库,这里是message表,序列化存到syscache表的一条记录,并且清空memcached缓存和缓存的fil​e。
Updatecache => getcachearray => save_syscache

下面我们研究缓存模块的下半部分,loadcache();

 

您可能还喜欢...