キャッシュオブジェクトを無効化/更新するためのより良いアプローチは何か知りたいです。
前提条件
- リモートmemcachedサーバーを持つ(複数のアプリケーションのキャッシュとして機能する)
- すべてのサーバーはAzure(アフィニティリージョン、同じデータセンター)によってホストされます
- キャッシュオブジェクトのサイズは200バイトから50キロバイトまでの範囲です
アプローチ1(できるだけ早くキャッシュに保存)
- オブジェクトAが作成されます->データベースに保存し、キャッシュに保存します
- クライアントによって要求されたオブジェクトA->キャッシュの存在をチェック、そうでなければデータベースからフェッチしてキャッシュに保存
- オブジェクトAが更新されます->データベースに保存、キャッシュに保存
アプローチ1はより簡単なようです。何かが作成されたら、できるだけ早くキャッシュに入れてください。誰かに関係なくそれが必要になります。
アプローチ2(遅延キャッシュストア)
- オブジェクトAが作成されます->データベースに保存
- クライアントによって要求されたオブジェクトA->キャッシュの存在をチェック、そうでなければデータベースからフェッチしてキャッシュに保存
- オブジェクトAが更新されます->データベースに保存、キャッシュのキーを削除
アプローチ2は、より多くのメモリを認識しているようです。このアプローチでは、リクエストされたアイテムのみがキャッシュに保存されます。
質問1:パフォーマンスを考慮して、より良いアプローチは何でしょうか?メモリもCPUもまだカウントされません。
質問2:私の考えは一種の時期尚早な最適化ですか?
質問3:他に考えはありますか?他のアプローチ?