緩存機(jī)制

2024-07-17 23:44 更新

為了獲取更多最新內(nèi)容及功能更新,請(qǐng)直接訪問(wèn)我們的首頁(yè)以查看DzzOffice筆記的最新地址。

DzzOffice支持兩種緩存機(jī)制:內(nèi)存緩存和內(nèi)置緩存。通過(guò)配置緩存,可以極大的提高DzzOffice的并發(fā)和承載能力。

系統(tǒng)內(nèi)置緩存

在系統(tǒng)配置文件/config/config.php中,存在以下一行代碼:

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

這就是DzzOffice系統(tǒng)內(nèi)置的緩存方式,如填寫為'sql',則使用數(shù)據(jù)庫(kù)緩存;如填寫為'file',則使用文件緩存。建議設(shè)置為'sql'以使用數(shù)據(jù)庫(kù)緩存,因?yàn)槠渌俣认噍^于文件緩存更快。當(dāng)這個(gè)配置改成'file'時(shí),系統(tǒng)生成的緩存將被寫入文件中。緩存文件存儲(chǔ)在"/data/cache"目錄下。當(dāng)服務(wù)器承受較高M(jìn)ySQL壓力時(shí),可通過(guò)file的文件緩存機(jī)制緩解MySQL的壓力,通過(guò)服務(wù)器IO換取MySQL的讀寫頻率,降低MySQL的壓力。

緩存更新原理:


緩存的工作原理:


在開發(fā)過(guò)程中,當(dāng)調(diào)用緩存時(shí),只需確認(rèn)所需的緩存名稱,然后調(diào)用

loadcache($cachenames, $force)

即可獲取先前保存的緩存內(nèi)容。

內(nèi)存緩存

引入緩存層的目的是為了解決MYSQL自身在高并發(fā)處理方面的性能瓶頸。目前,緩存層采用主流的Key-Value對(duì)形式。市場(chǎng)上有很多內(nèi)存級(jí)緩存產(chǎn)品。DzzOffice目前支持的內(nèi)存優(yōu)化接口包括Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache和Redis五種。系統(tǒng)將根據(jù)當(dāng)前服務(wù)器環(huán)境依次選擇合適的接口。在單服務(wù)器環(huán)境中,推薦使用APC;在多服務(wù)器環(huán)境中,推薦使用Redis或Memcache。緩存可以通過(guò)配置/config/config.php來(lái)啟用,配置選項(xiàng)如下:

$_config['memory']['prefix'] = 'dzzoffice_'; $_config['memory']['redis']['server'] = ''; // redis 服務(wù)器地址 $_config['memory']['redis']['port'] = 6379; // redis 服務(wù)器端口 $_config['memory']['redis']['pconnect'] = 1; // redis 是否長(zhǎng)久連接 $_config['memory']['redis']['timeout'] = 0; // redis 服務(wù)器連接超時(shí) $_config['memory']['redis']['serializer'] = 1; // redis::SERIALIZER選項(xiàng) $_config['memory']['memcache']['server'] = ''; // memcache 服務(wù)器地址 $_config['memory']['memcache']['port'] = 11211; // memcache 服務(wù)器端口 $_config['memory']['memcache']['pconnect'] = 1; // memcache 是否長(zhǎng)久連接 $_config['memory']['memcache']['timeout'] = 1; // memcache 服務(wù)器連接超時(shí) $_config['memory']['apc'] = 0; // 啟動(dòng)對(duì) apc 的支持 $_config['memory']['xcache'] = 0; // 啟動(dòng)對(duì) xcache 的支持 $_config['memory']['eaccelerator'] = 0; // 啟動(dòng)對(duì) eaccelerator 的支持

數(shù)據(jù)層是以表為單位的類文件,所有表類均繼承自dzz_table基類,基類實(shí)現(xiàn)了與緩存操作相關(guān)的函數(shù)。理論上,所有數(shù)據(jù)表均可進(jìn)行緩存。

dzz_table基類中緩存機(jī)制的實(shí)現(xiàn)

protected $_pre_cache_key; //緩存主鍵名前綴,為空時(shí)表示此表不支持緩存 protected $_cache_ttl; //緩存時(shí)間,以秒為單位,0表示永久或相關(guān)配置文件中的默認(rèn)值

dzz_table基類中緩存機(jī)制的方法

  1. 將一個(gè)變量緩存到緩存中,如果KEY已經(jīng)存在,則用新值覆蓋
store_cache($id, $data, $cache_ttl = null, $pre_cache_key = null)
  1. 獲取指定KEY的緩存數(shù)據(jù)
fetch_cache($ids, $pre_cache_key = null)
  1. 清除指定KEY的緩存
clear_cache($ids, $pre_cache_key = null)
  1. 更新一個(gè)已存在的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. 重置已經(jīng)存在的KEY的值
reset_cache($ids, $pre_cache_key = null)
  1. 累加緩存數(shù)據(jù)中某字段的值
increase_cache($ids, $data, $cache_ttl = null, $pre_cache_key = null)

在數(shù)據(jù)表類中添加以下參數(shù)以啟用緩存,例如:

public function __construct() { $this->_table = 'app_open'; $this->_pk = 'extid'; $this->_pre_cache_key = 'app_open_'; //緩存主鍵名前綴,為空時(shí)表示此表不支持緩存 $this->_cache_ttl =0; //緩存時(shí)間,以秒為單位,0表示永久或相關(guān)配置文件中的默認(rèn)值 parent::__construct(); }


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)