Discuz! 内存缓存机制与使用方法

159 篇文章 3 订阅
141 篇文章 17 订阅
本文介绍了一种内存级缓存优化方案,通过采用Key-Value形式的缓存产品如Redis和Memcache等来解决MySQL在高并发场景下的性能瓶颈。文章详细解释了缓存机制在用户相关表、回帖等六类数据表的应用,并提供了discuz_table基类中的缓存操作函数。
摘要由CSDN通过智能技术生成

内存级缓存

        缓存层的引入是为了解决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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值