缓存机制

2024-07-05 19:48 更新

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基类中缓存机制的方法

  1. 将一个变量缓存到缓存中,如果KEY已经存在,则用新值覆盖
store_cache($id, $data, $cache_ttl = null, $pre_cache_key = null)
  1. 获取指定KEY的缓存数据
fetch_cache($ids, $pre_cache_key = null)
  1. 清除指定KEY的缓存
clear_cache($ids, $pre_cache_key = null)
  1. 更新一个已存在的KEY,只更新修改的字段
update_cache($id, $data, $cache_ttl = null, $pre_cache_key = null)
  1. 批量更新缓存,只更新已存在KEY的指定修改的字段
update_batch_cache($ids, $data, $cache_ttl = null, $pre_cache_key = null)
  1. 重置已经存在的KEY的值
reset_cache($ids, $pre_cache_key = null)
  1. 累加缓存数据中某字段的值
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(); }


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号