序文#
Redis を学んでいると、Redis のトランザクション機能がロールバックできないことに気づきました。つまり、トランザクションを実行する際に途中で何かエラーが発生した場合、トランザクションの前に戻らず、そのまま続行されます。
え?え?それではトランザクションは何の役に立つのでしょうか。原子性も一貫性もありません。
資料を調査し、考えた結果、少しまとめてみましたが、完全ではないかもしれません。
パフォーマンスの最適化#
トランザクションはすべてのコマンドを一度にサーバーに送信し、一度に実行されるため、パフォーマンスが向上します
しかし、私はこの小さなパフォーマンスの最適化があまり意味がないと思います
並行環境でのデータの整合性#
複数のクライアントが同時に Redis インスタンスを操作する可能性があるため、トランザクションは実行中に割り込まれることなく保証されます。したがって、トランザクション内のコマンドのデータの整合性は保証されませんが、並行環境でのデータの整合性は保証されます
シンプルで効率的#
私たちは、Redis の多くのコマンドを学んできましたが、ほとんどのコマンドがエラーを返さないことに気づきました。たとえ入力したキーが間違っていても、単に nil
を返すだけです。したがって、Redis のコマンドの構文が間違っている場合にのみエラーが発生します。
つまり、ロールバックをサポートする必要はないので、これにより Redis はよりシンプルで効率的になります