Discuz! 缓存

Discuz! X2.5 的 config_global.php 中有这样一行代码

$_config['cache']['type'] = 'sql';

  这就是 Discuz! 内置的缓存方式,如果填写 'sql' 则为使用数据库缓存,填写 'file' 则为使用文件缓存。

内存级缓存

缓存层的引入是为了解决MYSQL自身对高并发处理的性能瓶颈,目前产品缓存层采用主流的Key-Value对形式,内存级的缓存产品很多,支持的内存优化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五种,优化系统将会依据当前服务器环境依次选用接口,单服务器环境中推荐使用APC,多服务器环境中推荐使用Redis或Memcache。

数据层是以表为单位的类文件,所有表类都继承discuz_table基类,基类实现缓存操 作的相关函数;理论上所有的数据表均可以缓存,目前产品在六个压力大的数据表内置开启了缓存 机制:用户相关表、回帖、主题、主题和专辑关系、淘贴专辑、用户关注关系。

  • 用户相关表

缓存表:'common_member', 'count', 'status','profile', 'field_home', 'field_forum'。
UID为缓存KEY。表数据更新时缓存数据会同步更新。

  • 回帖

以TID为单位,缓存第一页的post数据。表数据更新时缓存数据会同步更新。

  • 主题

TID为缓存KEY。表数据更新时缓存数据会同步更新。
版块列表默认参数第一页时以 forumdisplay_FID 为缓存KEY,缓存时间内数据不更新。

  • 主题和专辑关系

以TID为单位,此TID的专辑ID集合,表数据更新时缓存数据会同步更新。

  • 淘贴专辑

以TID为单位,此TID的专辑集合,缓存时间内数据不更新。

  • 用户关注关系

以UID为单位,此UID关注用户的关系数据,缓存时间内数据不更新。

内存级缓存层实现细节

    • discuz_table基类中缓存机制的实现
    • /**
      * @var string 缓存主键名前缀,为空时表示此表不支持缓存
      */
      protected $_pre_cache_key; /**
      * @var string 缓存时间,以秒为单位,0表示永久或相关配置文件中的默认值
      */
      protected $_cache_ttl;
      • discuz_table基类中缓存机制的方法
      • //缓存一个变量到缓存中,如果 KEY已经在则会被覆盖为新值
        store_cache($id, $data, $cache_ttl = null, $pre_cache_key = null)
        //获取指定KEY的缓存数据
        fetch_cache($ids, $pre_cache_key = null)
        //清除指定KEY的缓存
        clear_cache($ids, $pre_cache_key = null)
        //更新一个已经存在的KEY,只更新修改的字段
        update_cache($id, $data, $cache_ttl = null, $pre_cache_key = null)
        //批量更新缓存,只更新已经存在KEY的指定修改的字段
        update_batch_cache($ids, $data, $cache_ttl = null, $pre_cache_key = null)
        //重置已经存在的KEY的值
        reset_cache($ids, $pre_cache_key = null)
        //累加缓存数据中某字段的值
        increase_cache($ids, $data, $cache_ttl = null, $pre_cache_key = null)

          

        

最新文章

  1. iOS播放器 - AVPlayer
  2. webix custom component-九宫格
  3. CSS3系列二(媒体支持、文字与字体相关样式、盒相关样式)
  4. OSPF_Network-type
  5. 不借助jquery封装好的ajax,你能用js手写ajax框架吗
  6. rsync 的安装
  7. UVA 507 - Jill Rides Again 动态规划
  8. [Windows Phone]模仿魔兽3技能按钮SkillButton
  9. 201521123070 《JAVA程序设计》第12周学习总结
  10. openpose模型在AI challenge人体骨骼关键点检测的表现
  11. ASP.NET Core学习之二 菜鸟踩坑
  12. ng组件通讯的几种方式
  13. java库中的具体的集合
  14. P5241 序列
  15. [C++]_ELVE_Windows下QT5.12连接MySql8.0解决方案
  16. Linux下 编译lib3ds库
  17. [20171120]bash使用here documents的一个小细节.txt
  18. java io 好文传送
  19. git openssl 模块生成 https 请求的 ssl 测试证书
  20. python3获取主机名、主机IP

热门文章

  1. Solr7.x学习(7)-JAVA操作
  2. 基于ZYNQ 的UART中断实验之串口写数据到DDR3中
  3. Effective.Java第12-22条
  4. docker入门实例(转载)
  5. yum 删除了,如何重新导入
  6. 如何删除docker镜像中已配置的volume
  7. K8S学习笔记之K8S日志搜集实战
  8. java中反射知识点总结
  9. js获取简单表单对象(1)
  10. C#程序计算N阶行列式的值及N元一次方程组