0

2つのWebサーバーと中央のredisサーバーとSQLサーバーを備えたセットアップがあります。

SQL サーバーに対して行われるクエリのキャッシュとして redis を使用する必要があります。

そのため、Web サーバーは最初に redis キャッシュをチェックしてから、SQL サーバーに移動してその結果をキャッシュします。

ただし、2 つの Web サーバーは、もう一方が存在することを認識していないため、キャッシュされた「新しい」結果を置き換えることはできません。

このシナリオを回避したい:

タイムライン:

  • WebServer1 : キーの redis をチェックしますが、結果が見つかりません。
  • WebServer1 : SQL サーバーに Result1 を照会します。
  • WebServer2 : 新しいデータを SQL サーバーに保存し、クエリ結果を変更します。
  • WebServer2 : Redis キーを無効にします。
  • WebServer2 : SQL サーバーに Result2 を照会します。
  • WebServer2 : Result2 を Redis キーに入れます。
  • WebServer1 : Result1 を Redis キーに入れます。

上記の問題は、最新の結果「Result2」が「Result1」によって上書きされることです。

Redisでこれを回避する方法はありますか?

4

1 に答える 1

0

はい。サーバーからのredisのクエリ/更新が完了するまで、他のクエリを保留するロックを使用します。これに非常に短いタイムアウトを設定して、長時間ブロックしないようにします。

Redis 2.6.12+ を使用している場合は、Lua で SET ロック パターンを使用できます。以前のバージョンを使用している場合は、SETNX ロック パターンを使用できます。

于 2013-10-28T19:41:14.147 に答える