環境: 複数の Web (30)、キャッシュ (8) サーバー、および 1 つの専用データベース サーバー。
データベースをオフロードするために、中央の Redis キャッシュとローカル メモリ キャッシュが用意されています。
- 大規模な共通イベント データがキャッシュされ、スケジュールに基づいて更新されます
- ユーザー固有のデータは、アクセス時に個別にキャッシュされます
イベントによってユーザー固有のデータ ニーズの大規模なセットがすべて更新されると、問題が発生します。
約 20 万人の登録ユーザーがいて、イベントが発生すると約 10K ~ 20K がサイトに (同時に) 訪れます。ユーザーあたり平均 5 個のキャッシュ キーを使用すると、更新が必要なユーザー固有のデータを含む合計 50K ~ 100K のキャッシュ キーになります。
現在のソリューションは失敗します:
- ユーザーキャッシュをフラッシュすると、データベースが過負荷になります (30 Web サーバー)
- すべてのデータをキャッシュにロードするのに時間がかかる (10% しか使用されない)
- KEYS と SCAN はキャッシュをブロックできます (まだ試していません...これは問題ですか?)
この状況でのベストプラクティスは何ですか?