Redis トランザクション

RedisBeginner
オンラインで実践に進む

はじめに

この実験では、Redis のトランザクションについて学びます。Redis のトランザクションを使用すると、一連のコマンドを単一の、アトミックな操作として実行でき、データの整合性を保証します。MULTI コマンドでトランザクションを開始し、コマンドをキューイングし、その後トランザクションを実行または破棄する方法を学びます。トランザクション内でキーを設定し、値を取得し、カウンターをインクリメントする練習を行います。

Redis トランザクションの開始

このステップでは、MULTI コマンドを使用して Redis でトランザクションを開始する方法を学びます。Redis のトランザクションは、一連のコマンドが単一のアトミックな単位として実行されることを保証します。これは、すべてのコマンドが成功するか、または一つも成功しないかのどちらかであることを意味し、データの整合性を保証します。

まず、ターミナルで redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

redis-cli 環境に入ったら、トランザクションを開始できます。次のコマンドを入力して Enter キーを押します。

MULTI

以下の出力が表示されるはずです。

OK

これは、Redis がトランザクションモードに入ったことを確認します。その後に入力するコマンドは、EXEC コマンドを使用する際にまとめてキューイングされ、実行されます。

最初のコマンドをキューイングしましょう。mykey という名前のキーに myvalue という値を設定します。次のコマンドを入力して Enter キーを押します。

SET mykey "myvalue"

出力は次のようになります。

QUEUED

これは、SET コマンドがトランザクションキューに正常に追加されたことを示しています。実際に Redis に実行を指示するまで実行されません。

次のステップのために、redis-cli 環境を開いたままにしておいてください。

コマンドのキューイングとトランザクションの実行

このステップでは、トランザクションキューにさらにコマンドを追加し、EXEC コマンドを使用してトランザクション全体を実行します。

次に、mykey の値を取得するコマンドをキューイングしましょう。

GET mykey

以下のように表示されるはずです。

QUEUED

次に、別のキー anotherkeyanothervalue という値を設定するコマンドを追加しましょう。

SET anotherkey "anothervalue"

出力は次のようになります。

QUEUED

最後に、mycounter という名前のカウンターをインクリメントする INCR コマンドをキューイングしましょう。mycounter が存在しない場合、Redis はそれを生成し、インクリメントする前に 0 に初期化します。

INCR mycounter

以下のように表示されるはずです。

QUEUED

これで、トランザクション内に複数のコマンドをキューイングしました。それらをすべて一度に実行するには、EXEC コマンドを使用します。

EXEC

出力は以下のようになります。

1) OK
2) "myvalue"
3) OK
4) (integer) 1

出力の内訳を見てみましょう。

  • 1) OK: SET mykey "myvalue" コマンドの結果です。
  • 2) "myvalue": GET mykey コマンドの結果です。
  • 3) OK: SET anotherkey "anothervalue" コマンドの結果です。
  • 4) (integer) 1: INCR mycounter コマンドの結果です。

トランザクション内のすべてのコマンドはアトミックに実行されました。

次のステップのために、redis-cli 環境を開いたままにしておいてください。

トランザクション実行の検証

このステップでは、設定したキーの値を取得することで、前のトランザクション内のコマンドが正しく実行されたことを検証します。

値を確認するには、各キーに対して GET コマンドを使用します。

GET mykey
GET anotherkey
GET mycounter

以下のような出力が表示されるはずです。

"myvalue"
"anothervalue"
"1"

これにより、トランザクションが正常に実行され、キーの値が期待どおりに更新されたことが確認できます。

次のステップのために、redis-cli 環境を開いたままにしておいてください。

DISCARD によるトランザクションのキャンセル

このステップでは、DISCARD コマンドを使用して Redis トランザクションをキャンセルする方法を学びます。キューイングされたコマンドを実行したくないと判断した場合に便利です。

まず、Redis サーバーに接続し、新しいトランザクションを開始します。

MULTI

次に、いくつかのコマンドをキューイングしましょう。

SET mykey "newvalue"
INCR mycounter

各コマンドに対して QUEUED という応答が表示されるはずです。

ここで、トランザクションを実行する代わりに、キャンセルしましょう。DISCARD コマンドを使用します。

DISCARD

以下のように表示されるはずです。

OK

これにより、トランザクションがキャンセルされ、キューイングされていたすべてのコマンドが破棄されたことが確認できます。確認するために、mykeymycounter の値を確認できます。それらは更新されていないはずです。

コマンドがログに記録されるように、redis-cli 環境を終了することを忘れないでください。

exit

まとめ

この実験では、Redis トランザクションを使用して複数のコマンドをアトミックに実行する方法を学びました。MULTI でトランザクションを開始し、コマンドをキューイングし、EXEC でトランザクションを実行し、DISCARD でトランザクションをキャンセルする練習をしました。この知識は、複雑な操作を実行する際に Redis でデータの整合性を維持するために不可欠です。