実際のデータストアとキャッシュは、質問ですでに説明した3番目のアプローチを使用して同期する必要があります。
決定的なストア(つまりSQLデータベース)にデータを追加するときは、このデータをサービスバスまたはメッセージキューにエンキューし、非同期サービスに何らかのバックグラウンドプロセスを使用して同期全体を実行させる必要があります。
このような場合には入りたくない(サービスバスと非同期サービスを使用していない場合):
- データがデータベースとキャッシュの両方に保存されるまでユーザーが待機する必要があるため、リクエストまたはプロセスを遅くします。
- キャッシュプロセス中に失敗し、再試行ポリシー(通常はサービスバスまたは一部のメッセージキューに組み込まれている機能)を設定できないリスクがあります。また、この障害は部分的または完全なキャッシュの破損につながる可能性があり、この状況を修正するためのタスクを自動的かつ簡単にスケジュールすることはできません。
Redisキーの有効期限の使用については、良い考えです。 Redisは組み込みのメカニズムを使用してキーを期限切れにすることができるため、バックグラウンドプロセス全体からキーの期限切れを実装しないでください。キーが存在する場合は、それがまだ有効であるためです。
ところで、あなたは常にこのケースにいるわけではありません(キーの有効期限が切れていない場合、それは上書きされるべきではないことを意味します)。実際のドメインによって異なる場合があります。