MySQLクエリの結果をMemcachedに保存するときの一貫性について考えていました。更新時に何が起こりますか?
更新時に、データは Memcached から削除されます。
しかし...次の操作がこの順序で行われる次のシナリオを考えてみましょう:
- クライアント A が更新リクエストを API サーバーに送信します。
- クライアント B が GET リクエストを API サーバーに送信します。
- 両方のリクエストが並行して実行されます。
- クライアント B のリクエストを処理するスクリプトは、DB からデータを取得します。
- クライアント A の要求を処理して DB 上のデータを更新するスクリプト。
- クライアント A の要求を処理するスクリプトは、削除要求を memcached に送信します。
- クライアント B のリクエストを処理するスクリプトは、挿入リクエストを memcached に送信します。
この場合、memcached には古いデータが取り込まれます。
このシナリオで一貫性を確保するにはどうすればよいですか?