アプリケーションにmemcachedレイヤーを追加し始めています。ここまでは順調ですね。
しかし、データの関連性を維持するために、誰かがファイルをサイトにアップロードするときに、一度に大量のキーを無効化/削除する必要があることにすぐに気付きました。
私はいくつかの読書をしました、そしてこの問題を回避する最も一般的な方法は各キーにバージョン番号を設定することであるようです、そしてユーザーがアップロードするときにキーを削除するのではなく(非常に多くの順列があるかもしれないので)あなたはバージョン番号を増やします、次にデータにアクセスしたときにキャッシュミスを引き起こします。
私はこれをコード化するためにどこから始めればよいのか分かりませんし、とにかく完全に頭を悩ませているかどうかはよくわかりません。
私のコードは現在次のようになっています:-
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$key = md5("songsearch_$textSearch.$rangeSearch");
上記のキー変数の2つの変数は、大量のJSONを取得するgetリクエストから取得されます。(製品カタログを考えてください)。
これらの変数は、これらの変数に応じて動的にまとめられるクエリ自体も決定します。同じスクリプトから何百ものキーを生成できたとしても、最終的には、これらすべてが個々のクエリに固有のキーを提供します。
上記が明確であることを願っています。そうでない場合は、私の質問に答えるのに役立つように、ポイントを明確にするように依頼してください。
明らかに後で、キャッシュを設定するために、私はこれを使用しています:-
$memcache->set($key, $output, MEMCACHE_COMPRESSED, time() + 24*60*60*365);
JSONをエンコードする直前。
だから私の質問は本当に...ユーザーがファイルをアップロードした場合にこのスクリプトによって生成された多くのキーを無効にできるように、これに何らかの形式のインクリメンタルバージョンを追加するにはどうすればよいですか?
少なくとも私を正しい方向に導いてくれた人に感謝します。