5

私はPHPでmemcachedを使用して、db-readsを回避するために大量のキャッシュを試みています。更新時にキャッシュを無効にしています(アプリケーションが無効になります)。しかし、古いキャッシュデータは大きな問題になりつつあります。ほとんどの場合、これは無効化のバグが原因です(間違ったキーを無効にするか、UPDATEのキャッシュエントリを無効にするのを忘れています)。

開発/本番中にこれらのタイプのバグを検出/デバッグするための良い方法はありますか?

4

3 に答える 3

3

最善の方法は、mysql_query の周りにラッパー関数を配置することです。その中で、クエリがキャッシュされたテーブルへの更新または削除であるかどうかを確認し、変更されているキーを解析します。これは書くのに時間がかからず、テストも簡単で、キャッシュの無効化を二度と忘れることがなくなります。

于 2009-02-05T21:15:45.040 に答える
0

楽観的同時実行制御を使用できます。これには、テーブルにもう1つの列(タイムスタンプまたは同等のもの、または単なるint)を追加し、更新を行うときにそれを使用することが含まれます。使用方法は次のとおりです(プレーンintが「バージョンタグ」の場合)。

update BlogPost set PublishedOn = :publishedOn, VersionTag = VersionTag + 1
where ID = :id and VersionTag = :versionTag

また、タイムスタンプがDBMSによって自動的に更新されると仮定すると、これはタイムスタンプで行われる方法です。

update BlogPost set PublishedOn = :publishedOn
where ID = :id and Timestamp = :timestamp
于 2009-01-29T13:20:03.197 に答える