Discuz的快取體系
參考文件:<http://dev.discuz.org/wiki/index.php?title=快取機制>
Discuz中涉及資料快取的地方有:
1. session Dz的session只儲存了登陸狀態,不是我們理解的儲存整個會話狀態的概念
2. cache
3. syscache
4. memory
我們通常意義上的快取應該是對應到discuz的memory這一塊,其他的三項可能是歷史遺留問題,造成在使用時有較多的入口。
先說session,Discuz的session是完全獨立的,存放在資料庫表 – common_session中,使用時需以$discuz->session->set(`lastolupdate`, TIMESTAMP);形式呼叫。表結構與一般快取的key -> value形式很大不同。
cache應該是最早的快取機制,概念上應該有基於db和file的兩種快取機制,db模式資料預設放在資料表 – common_cache中,他的操作方式在source/class/db/cache_sql中有所體現,配置項為$_config[`cache`][`type`] = `sql`;, 但沒有在程式碼中看到使用的地方,應該是被廢棄了。file模式存放在data/cache下面,同樣的,cache_file這個機制也應該是被廢棄了,直接放到了函式庫中。
syscache 是專門針對系統各項設定包括外掛的引數進行集中快取處理的機制,資料預設先存在資料表 – common_syscache中,然後在使用時存入到file中進行加速。所以他是一項特定的東西,但3.0以下file的存放目錄為data/cache,與cache的file模式存放的目錄相同,比較容易讓初入門者迷惑。
memory中引入的機制,他的定義應該是能真正提高系統效能的快取機制,如memcached、redis這類nosql的儲存引擎。
結論:
經過分析後,發現cache 與 memory應該可以合併起來,即在source/class/memory目錄(3.0)中加上file/db兩種driver,將原來cache目錄下的兩個檔案複製過來,簡單的修改一下即可,同時function_core中對應的方法也要進行相應修改。
涉及cache操作的方法在function_core.php 與function_cache.php兩個檔案中。
functin_core.php:loadcache、cachedata;這裡載入的指的是syscache,3.0中直接完全使用db的方式存放在common_syscache表中,放棄以前還要同步生成file快取的做法。合併file、db兩者引擎到memory中後,memory()應該就是日常快取使用者資料的唯一入口了,3.0以上由Core提供了全域性mem物件。
function_cache.php:updatecache、writetocache 同樣指的是syscache,writetocache方法應該是一個殘留的函式,它的作用是寫入指定的快取內容到file cache中。
相關文章
- Mybatis-聊一聊雞肋的快取體系MyBatis快取
- Glide - 記憶體快取與磁碟快取IDE記憶體快取
- 秒開快取系統支援的硬體陣列卡快取陣列
- 如何設計快取系統:快取穿透,快取擊穿,快取雪崩解決方案分析快取穿透
- 【實踐】你真的認識 Web 快取體系?Web快取
- 分散式系統快取系列一 認識快取分散式快取
- 多核cpu、cpu快取記憶體、快取一致性協議、快取行、記憶體快取記憶體協議
- Java記憶體快取-通過Google Guava建立快取Java記憶體快取GoGuava
- CPU快取記憶體快取記憶體
- 系統快取全解析2:頁面輸出快取快取
- 系統快取全解析5:檔案快取依賴快取
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- 【Django】Django快取系統Django快取
- 記憶體快取系統memcached與redis實現的對比記憶體快取Redis
- MRAM快取記憶體的組成快取記憶體
- 不一樣的HTTP快取體驗HTTP快取
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- Linux系統手動釋放記憶體快取Linux記憶體快取
- 如何快速清除 Ubuntu 的系統快取Ubuntu快取
- 系統快取全解析3:頁面區域性快取快取
- 系統快取全解析4:應用程式資料快取快取
- 從CPU快取看快取的套路快取
- 快取穿透、快取擊穿、快取雪崩快取穿透
- 快取穿透、快取雪崩、快取擊穿快取穿透
- DDD 和 記憶體快取記憶體快取
- 記憶體快取選型記憶體快取
- Java記憶體快取-通過Map定製簡單快取Java記憶體快取
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- HTTP快取——協商快取(快取驗證)HTTP快取
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- 【Linux】Linux 的快取記憶體Linux快取記憶體
- 快取穿透 快取雪崩快取穿透
- 對於前端快取的理解(快取機制和快取型別)前端快取型別
- 瀏覽器的快取機制—強快取與協商快取瀏覽器快取
- 快取問題(一) 快取穿透、快取雪崩、快取併發 核心概念快取穿透
- 解析分散式系統的快取設計分散式快取
- 淺談快取寫法(三):記憶體快取該如何設計快取記憶體
- 快取穿透、快取擊穿、快取雪崩區別快取穿透