シナリオ:リクエストが来るたびに、Redis インスタンスに接続し、接続を開き、カウントをフェッチし、カウントを更新し、接続を閉じる必要があります (すべてのリクエストについて、これがフローです)。リクエストが順番に来る場合、つまり 1ユーザーが 100 個のリクエストを次々に送信すると、Redis のカウントは 100 になります。
問題:問題は同時リクエストが来るときです。つまり、10 人のユーザーが 100 のリクエスト (各ユーザーが 10 のリクエスト) を同時に送信している場合、カウントは 100 ではなく、約 50 です。
例: Redis のカウントが 0 であると仮定します。10 個のリクエストが同時に来ると、10 個の接続が開かれ、10 個の接続すべてがカウント値を 0 としてフェッチし、1 に更新します。
分析:リクエストが同時に送信されるため、複数の接続が同じカウント値を取得して更新していることがわかりました。これは、カウント値がオーバーライドされているためです。すでにこの問題に遭遇している場合、この問題を回避する最善の方法を誰かが提案できますか?
ここでは、Hapijs、Redis 3.0、ioredis を使用しています。