84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
Redis リストを使用してリミッターを作成しており、ほとんどの場合期待どおりに機能しますが、最近、有効期限のないキーがいくつかあることに気付きました。理想的には、リストに値を「rpush」し、トランザクションの有効期限を設定し、トランザクションが開始する前に「watch」も使用します。
予測: v2.1.2 PHP7.4 Redisサーバー5.0.10
これはローカル Redis サーバーで予期される操作です
Redis トランザクションは、そのようなアトミックなトランザクションではありません。コマンド内のトランザクションの実行中は他のプロセスがキー空間にアクセスできないため、これらはアトミックです。トランザクション内のコマンドが失敗した場合、後続のコマンドは実行され、ロールバックされません。
たとえば、間違ったコマンドを含むトランザクションを実行してみましょう:
ここでは、リストが存在するかどうかを確認し、いくつかの初期項目をリストに追加します。次に、トランザクション内でリストから項目をポップし、誤って新しい項目を追加しようとして、キー mylist がコレクションを所有していると考え、キー mylist を設定します。最初と 3 番目のコマンドは成功し、最後に mylist が存続時間を設定します。 2 番目のコマンドは失敗します。このためのロールバック機能は Redis に組み込まれていません。アプリケーションは watch コマンドを介してオプティミスティック ロックを使用する必要があります。これは、トランザクションが必要な変更をトランザクションが取得する前に、他のプロセスによる変更を検出するためです。キーはサーバーに排他的にアクセスできます。これはロールバックメカニズムではありません。
mylist
mylist を設定します。最初と 3 番目のコマンドは成功し、最後に mylist が存続時間を設定します。 2 番目のコマンドは失敗します。このためのロールバック機能は Redis に組み込まれていません。アプリケーションは watch コマンドを介してオプティミスティック ロックを使用する必要があります。これは、トランザクションが必要な変更をトランザクションが取得する前に、他のプロセスによる変更を検出するためです。キーはサーバーに排他的にアクセスできます。これはロールバックメカニズムではありません。
watch
詳細: https://redis.io/docs/interact/transactions/
Redis トランザクションは、そのようなアトミックなトランザクションではありません。コマンド内のトランザクションの実行中は他のプロセスがキー空間にアクセスできないため、これらはアトミックです。トランザクション内のコマンドが失敗した場合、後続のコマンドは実行され、ロールバックされません。
たとえば、間違ったコマンドを含むトランザクションを実行してみましょう:
リーリーここでは、リストが存在するかどうかを確認し、いくつかの初期項目をリストに追加します。次に、トランザクション内でリストから項目をポップし、誤って新しい項目を追加しようとして、キー
mylist
がコレクションを所有していると考え、キーmylist を設定します。最初と 3 番目のコマンドは成功し、最後に
mylist
が存続時間を設定します。 2 番目のコマンドは失敗します。このためのロールバック機能は Redis に組み込まれていません。アプリケーションはwatch
コマンドを介してオプティミスティック ロックを使用する必要があります。これは、トランザクションが必要な変更をトランザクションが取得する前に、他のプロセスによる変更を検出するためです。キーはサーバーに排他的にアクセスできます。これはロールバックメカニズムではありません。詳細: https://redis.io/docs/interact/transactions/