discuz可以使用多種緩存,這裡只說資料快取。 discuz支援redis、memcache等快取方式,只要在/config/config_global.php裡設定一下,並且環境支援就可以使用了。
其實讀寫快取還是比較簡單的,程式碼如下:
require_once libfile('function/cache'); //加载缓存类 savecache($cachename, $data); //写缓存 loadcache($cachename); //读缓存,将缓存写到$_G变量中,通过读取$_G['cache']来获取缓存数据。
其中savecache()將資料寫到設定的快取中(如memcache\redis\xpc等),並會將快取記錄到common_syscache表中。
使用loadcache()時,會呼叫table_common_syscache類別裡的fetch_all方法來取得緩存,
1、先判斷是否設定了記憶體緩存,若是,讀取記憶體快取的數據,存在數據直接返回,不存在及沒設定記憶體快取則進入第2步。
2、接著判斷是否設定了檔案緩存,若是,讀取檔案快取數據,存在資料直接返回,不存在及沒設定檔快取則進入第3步。
3、讀取common_syscache表格的資料並回傳。 (所以清除緩存時要兼顧到這幾方面)
關鍵在於清除緩存,在全局->性能優化->內存優化是可以做一些設定優化,在記憶體快取管理也可以直接清除指定快取。但對於自訂的快取需要自行開發功能清除。我的環境是開啟了memcache緩存,然後用系統自帶的memory()函數清除緩存,但是使用loadcache()讀取資料時發現緩存仍然存在。原因是memory()可以清除memcache的數據,但是沒有清除commom_syscache表的,所以loadcache()時依舊存在。後來查了一下發現了deletegroupcache()函數。為了適應全局,自已在/source/function/function_core.php裡簡單寫了deletecache()函數。程式碼如下:
function deletecache($cachenames) { if(!empty($cachenames)) { C::t('common_syscache')->delete($cachenames); } }
以上是discuz 中使用memcache快取步驟的詳細內容。更多資訊請關注PHP中文網其他相關文章!