缓存机制
为了获取更多最新内容及功能更新,请直接访问我们的首页以查看DzzOffice笔记的最新地址。
DzzOffice支持两种缓存机制:内存缓存和内置缓存。通过配置缓存,可以极大的提高DzzOffice的并发和承载能力。
系统内置缓存
在系统配置文件/config/config.php中,存在以下一行代码:
$_config['cache']['type'] = 'sql';
这就是DzzOffice系统内置的缓存方式,如填写为'sql',则使用数据库缓存;如填写为'file',则使用文件缓存。建议设置为'sql'以使用数据库缓存,因为其速度相较于文件缓存更快。当这个配置改成'file'时,系统生成的缓存将被写入文件中。缓存文件存储在"/data/cache"目录下。当服务器承受较高MySQL压力时,可通过file的文件缓存机制缓解MySQL的压力,通过服务器IO换取MySQL的读写频率,降低MySQL的压力。
缓存更新原理:
缓存的工作原理:
在开发过程中,当调用缓存时,只需确认所需的缓存名称,然后调用
loadcache($cachenames, $force)
即可获取先前保存的缓存内容。
内存缓存
引入缓存层的目的是为了解决MYSQL自身在高并发处理方面的性能瓶颈。目前,缓存层采用主流的Key-Value对形式。市场上有很多内存级缓存产品。DzzOffice目前支持的内存优化接口包括Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache和Redis五种。系统将根据当前服务器环境依次选择合适的接口。在单服务器环境中,推荐使用APC;在多服务器环境中,推荐使用Redis或Memcache。缓存可以通过配置/config/config.php来启用,配置选项如下:
$_config['memory']['prefix'] = 'dzzoffice_';
$_config['memory']['redis']['server'] = ''; // redis 服务器地址
$_config['memory']['redis']['port'] = 6379; // redis 服务器端口
$_config['memory']['redis']['pconnect'] = 1; // redis 是否长久连接
$_config['memory']['redis']['timeout'] = 0; // redis 服务器连接超时
$_config['memory']['redis']['serializer'] = 1; // redis::SERIALIZER选项
$_config['memory']['memcache']['server'] = ''; // memcache 服务器地址
$_config['memory']['memcache']['port'] = 11211; // memcache 服务器端口
$_config['memory']['memcache']['pconnect'] = 1; // memcache 是否长久连接
$_config['memory']['memcache']['timeout'] = 1; // memcache 服务器连接超时
$_config['memory']['apc'] = 0; // 启动对 apc 的支持
$_config['memory']['xcache'] = 0; // 启动对 xcache 的支持
$_config['memory']['eaccelerator'] = 0; // 启动对 eaccelerator 的支持
数据层是以表为单位的类文件,所有表类均继承自dzz_table基类,基类实现了与缓存操作相关的函数。理论上,所有数据表均可进行缓存。
dzz_table基类中缓存机制的实现
protected $_pre_cache_key; //缓存主键名前缀,为空时表示此表不支持缓存
protected $_cache_ttl; //缓存时间,以秒为单位,0表示永久或相关配置文件中的默认值
dzz_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)
在数据表类中添加以下参数以启用缓存,例如:
public function __construct() {
$this->_table = 'app_open';
$this->_pk = 'extid';
$this->_pre_cache_key = 'app_open_'; //缓存主键名前缀,为空时表示此表不支持缓存
$this->_cache_ttl =0; //缓存时间,以秒为单位,0表示永久或相关配置文件中的默认值
parent::__construct();
}
更多建议: