未読/既読カウンターを維持するメッセージングアプリケーションがあります。現在、この値を1時間キャッシュし、ユーザーがアプリをヒットしてキャッシュの有効期限が切れた場合、データベーステーブルでカウントが行われ、キャッシュされた値が更新されます。
問題は、多数のユーザーが一度にアクセスし、キャッシュの有効期限が切れた場合です。これは実際には非常に一般的です。これにより、すべてのカウントをライブで同時に実行するためにデータベースに多大な負担がかかります。
メッセージを追加または削除するときに、このカウンターをキャッシュにアクティブに維持する方法を見つけたいと思います。これにより、ユーザーはキャッシュされた値に到達するだけで、期限切れになることはありません。新しい問題は、キャッシュの更新をトリガーするメッセージを追加または削除するシステムがカップルを見逃す可能性があるため、カウント値が同期していることを確認することです。そのため、2つの数値は同期しなくなります。
私が思いついたオプションのいくつか:
Xが更新されるたびに強制更新を実行します。これはアクティブユーザーにとっては問題ありませんが、アクティブでないユーザーは不正確なカウントを持つ可能性が高く、キャッシュの有効期限がないため、そのカウントは長期間残ります。
カウントを更新するバックグラウンドジョブがあります。これには、非アクティブなユーザーにdbリソースを費やしているという問題があり、非効率的で時間がかかります。
このタイプのカウントの維持に関する一般的な提案はありますか?