私は数日間 discuz のキャッシュをいじっていましたが、効率が非常に低いため、いくつかの手がかりが得られました。2333333~~~~
discuz はここでさまざまなキャッシュを使用できます。ここではデータ キャッシュについてのみ説明します。 discuz は、redis や memcache などのキャッシュ メソッドをサポートしています。/config/config_global.php で設定するだけで、環境がサポートします。
実際、キャッシュの読み取りと書き込みは比較的単純です。コードは次のとおりです。
require_once libfile('function/cache'); //加载缓存类 savecache($cachename, $data); //写缓存 loadcache('plugin_fahao_kflist'); //读缓存,将缓存写到$_G变量中,通过读取$_G['cache']来获取缓存数据。
ここで、savecache() は設定されたキャッシュ (memcacheredisxpc など) にデータを書き込み、 common_syscache テーブルにキャッシュします。
loadcache() を使用する場合、table_common_syscache クラスの fetch_all メソッドが呼び出され、キャッシュが取得されます。 1. まず、メモリ キャッシュが設定されているかどうかを確認します。設定されている場合は、メモリ キャッシュ内のデータを読み取ります。データが存在する場合は直接返されます。存在しない場合は、ステップ 2 に進みます。 2. 次に、ファイル キャッシュが設定されているかどうかを確認し、設定されている場合は、ファイル キャッシュ データを読み取り、データが存在しない場合、またはファイル キャッシュが設定されていない場合は、ステップ 3 に進みます。 3. common_syscache テーブルからデータを読み取り、それを返します。 (したがって、キャッシュをクリアするときは、これらの側面を考慮する必要があります)
重要なのは、グローバル -> パフォーマンスの最適化 -> メモリの最適化で、メモリ キャッシュ管理で設定の最適化を実行できることです。 、指定したキャッシュを直接クリアすることもできます。ただし、カスタマイズされたキャッシュの場合は、キャッシュをクリアする独自の関数を開発する必要があります。私の環境では、memcache キャッシュがオンになっており、システムの組み込みのmemory() 関数を使用してキャッシュをクリアしていますが、loadcache() を使用してデータを読み取ると、キャッシュがまだ存在していることがわかります。その理由は、memory() は memcache データをクリアできますが、commmom_syscache テーブルはクリアしないため、loadcache() が使用されるときにテーブルがまだ存在するためです。後で調べたところ、deletegroupcache() 関数が見つかりました。全体的な状況に適応するために、/source/function/function_core.php に deletecache() 関数を単純に書きました。コードは次のとおりです:
function deletecache($cachenames) { if(!empty($cachenames)) { C::t('common_syscache')->delete($cachenames); } }
上記は、内容の側面も含めて discuz でのデータ キャッシュの使用方法を紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。