1

MySQLクエリの結果をMemcachedに保存するときの一貫性について考えていました。更新時に何が起こりますか?

更新時に、データは Memcached から削除されます。

しかし...次の操作がこの順序で行われる次のシナリオを考えてみましょう:

  1. クライアント A が更新リクエストを API サーバーに送信します。
  2. クライアント B が GET リクエストを API サーバーに送信します。
  3. 両方のリクエストが並行して実行されます。
  4. クライアント B のリクエストを処理するスクリプトは、DB からデータを取得します。
  5. クライアント A の要求を処理して DB 上のデータを更新するスクリプト。
  6. クライアント A の要求を処理するスクリプトは、削除要求を memcached に送信します。
  7. クライアント B のリクエストを処理するスクリプトは、挿入リクエストを memcached に送信します。

この場合、memcached には古いデータが取り込まれます。

このシナリオで一貫性を確保するにはどうすればよいですか?

4

1 に答える 1

0

データベース アクセスをラップするコードにキャッシュ処理を一元化します。スクリプト A と B は、このレイヤー以外ではデータベースと通信しないでください。

そのすべての問題を経験したくない場合 (使用しているスタックによっては、これに対する既存の解​​決策があります)、キャッシュの不一致が害を及ぼさない状況にキャッシュを制限してください。

于 2015-11-20T23:02:16.613 に答える