Redis-Redisトランザクションの詳細な理解
3376 ワード
目次 Redisはどのようにトランザクションを実現しますか? トランザクションで実行されたコマンドにエラーが発生しました.トランザクションはロールバックされますか? 同じ接続でトランザクションを繰り返しオープンできますか? 複数のクライアントが同時にトランザクションを開くとどうなりますか? Redisトランザクションを使用するのはMULTIとEXECだけですか? RedisのWATCHメカニズムはどのように実現されていますか?
Redisはどのようにトランザクションを実現しますか?
トランザクションを解読するにはACIDの4つの原則を満たす必要があります.Redisがトランザクションを実装するメカニズムを知ることで、RedisがACIDをそれぞれ保証する方法を知ることができます.同時に、トランザクションの実装メカニズムを理解し、Redisトランザクションの優劣、使用時にRedisトランザクションの欠点をどのように回避するかを明らかにすることができます.
リファレンス Redisトランザクション 概要 Redisは4つのコマンドによってトランザクションを実現する: . Redisトランザクションは トランザクションが開始されると、Redisアクションコマンドはすぐには実行されず、トランザクションキューに先に入ります.Redisトランザクションキューは、FIFOキュー である
トランザクションで実行されたコマンドにエラーが発生しました.トランザクションはロールバックされますか?
通常、1つのトランザクションに1つ以上のRedis操作があり、いずれの操作も失敗する可能性があります.操作エラーが発生した場合、トランザクションの実行に影響しますか?
リファレンス Redisトランザクション 概要まず、Redisトランザクションではロールバックはサポートされていません.つまり、トランザクション内のコマンドの実行にエラーが発生した場合、実行済みのコマンドは撤回されず、後続のコマンドも実行されます. Redisトランザクションのコマンドは、エンキューと実行の2つのフェーズに分けられます.エンキュー中にエラーが発生した場合、Redisはエンキュー中にエラーが発生したコマンドを無視し、後続のコマンドのエンキューには影響しません.実行中にエラーが発生すると、エラーコマンドはRedisに無視され、他のエラーのないコマンドが実行されます.
同じ接続でトランザクションを繰り返しオープンできますか?
本質的な問題を解読するには、トランザクションのネストを許可するかどうかです.
リファレンス Redis設計と実装-トランザクション 剖析!Redisトランザクション実装原理 概要 Redisトランザクションはネストできません. .ネストされたトランザクションがエラーを返すと、トランザクションキューがコマンドを受信し続けることには影響しません.トランザクションキュー内のデータは変更されません.
複数のクライアントが同時にトランザクションを開くとどうなりますか?
同時状況を解読すると、複数のクライアントが同時にトランザクションを開く場合が容易になります.このときRedisはクライアントメンテナンストランザクションキューを区別しますか?また、実際のエンジニアリングではパフォーマンスを向上させるためにRedis接続プールで接続を多重化するのが一般的ですが、この場合、接続多重化によるトランザクションのネストは発生しますか?
リファレンス Redis設計と実装-トランザクション 剖析!Redisトランザクション実装原理 Sping Data Redisトランザクションを使用する場合、接続をオフにしない問題 概要 Redisトランザクションキューは接続にバインドされており、異なる接続では同時にトランザクションを開くことができ、 に相互に影響を与えることはありません.合理的なトランザクションマネージャでは、トランザクションが開始されると接続がバインドされ、接続が他のリクエストによって多重化されないようにします.ただし、適切に適用しないと、接続が返されないという問題が発生します. Redisトランザクションを使用するのは
Redisトランザクションの解読は、単純に
リファレンス Redis設計と実装-トランザクション 概要トランザクションを開始する前に、 を形成する.トランザクション実行時、
Redisの
無他を解読するのは、底辺の実現原理を理解するためだけだ.
リファレンス Redisトランザクション Redis設計と実装-トランザクション 概要各 を維持する. トランザクションが実行されると、このclientの
Redis公式文書-transactionsを参照
Redisはどのようにトランザクションを実現しますか?
トランザクションを解読するにはACIDの4つの原則を満たす必要があります.Redisがトランザクションを実装するメカニズムを知ることで、RedisがACIDをそれぞれ保証する方法を知ることができます.同時に、トランザクションの実装メカニズムを理解し、Redisトランザクションの優劣、使用時にRedisトランザクションの欠点をどのように回避するかを明らかにすることができます.
リファレンス
WATCH
,MULTI
,EXEC
,DISCARD
,MULTI
EXEC
コマンドで開始し、DISCARD
/EXEC
コマンドで終了します.DISCARD
はトランザクションのコミットに使用され、EXEC
はトランザクションのキャンセルに使用されます.MULTI
コマンドを実行すると、トランザクションキュー内のコマンドが1つずつ実行され、コマンドによって中断されません.トランザクションで実行されたコマンドにエラーが発生しました.トランザクションはロールバックされますか?
通常、1つのトランザクションに1つ以上のRedis操作があり、いずれの操作も失敗する可能性があります.操作エラーが発生した場合、トランザクションの実行に影響しますか?
リファレンス
同じ接続でトランザクションを繰り返しオープンできますか?
本質的な問題を解読するには、トランザクションのネストを許可するかどうかです.
リファレンス
(error) ERR MULTI calls can not be nested
のコマンドを受信してトランザクションを開くと、エラーが返されます(redis-cliはMULTI
のエラーが返されます)複数のクライアントが同時にトランザクションを開くとどうなりますか?
同時状況を解読すると、複数のクライアントが同時にトランザクションを開く場合が容易になります.このときRedisはクライアントメンテナンストランザクションキューを区別しますか?また、実際のエンジニアリングではパフォーマンスを向上させるためにRedis接続プールで接続を多重化するのが一般的ですが、この場合、接続多重化によるトランザクションのネストは発生しますか?
リファレンス
EXEC
とMULTI
だけですか?Redisトランザクションの解読は、単純に
EXEC
とWATCH
だけではいけません.いくつかのkeyはトランザクションの実行時に変わったからです.正しいRedisトランザクションがトランザクションの実行を保証する必要がある場合、トランザクションに関連するデータは変更されません.リファレンス
WATCH
コマンドを使用して指定キーを監視し、楽観ロックWATCH
のkeyによって変更された場合、トランザクションは失効し、実行できません.Redisの
WATCH
メカニズムはどのように実現されていますか?無他を解読するのは、底辺の実現原理を理解するためだけだ.
リファレンス
WATCH
のkeyは、WATCH
というkeyのすべてのclientリストWATCH
のkeyが変更されると(任意の変更コマンドが実行される)、そのkeyのclientのREDIS_DIRTY_CAS
フィールドはすべてオープン状態に変更される.REDIS_DIRTY_CAS
フィールドが開かれると、少なくとも1つのデータが変更されたことを示し、トランザクションは実行できません.Redis公式文書-transactionsを参照