discuz 中使用memcache快取步驟

PHPz
發布: 2023-03-06 14:48:02
原創
3343 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!