私のプログラムは、Redisの2つのリストにトランザクションとしてデータを追加する必要があります。データは両方のリストで一貫している必要があります。例外またはシステム障害が発生し、1つのリストに追加されたデータのみをプログラムする場合、システムはリカバリおよびロールバックできる必要があります。しかし、Redisの文書によれば、ロールバックをサポートしていません。これをどのように実装できますか?私が使用する言語はJavaです。Redisでロールバックを使用してトランザクションを実装する方法
答えて
Redisの取引が異なります。それは2つのことを保証します。
- すべてまたはコマンドのいずれも
- シーケンシャルおよび中断のないコマンドを実行している
はあなたのコードを管理していると、システム障害が(いくつかの並べ替えが起こるだろうというとき知っていれば、と述べました例外をキャッチする)、この方法で要件を達成することができます。
- MULTI - >
- LPUSH QUEUE1 1は、トランザクションを開始 - >キューにプッシュ2
- EXEC /第4回では
を捨てる - >キューに1
希望します。
トランザクションのロールバックが必要な場合は、Redis以外のものを使用することをお勧めします。 Redisトランザクションは他のデータストアと同じではありません。たとえロールバックがないからでも、Multi/Execでさえ、あなたが望むものに対しては機能しません。ロールバックが必要な場合は、両方のリストをプルダウンしてリストアする必要があります。また、エラー状態とロールバックの間に、他のクライアントもリストのいずれかを変更しないようにしてください。これを日常的かつ信頼できる方法で行うのは簡単ではなく、単純でもありません。非常に広範で、Redis特有のものではないので、おそらくそれは良い質問ではないでしょう。
ここで、EXECが考えていることをしない理由について説明します。あなたの提案シナリオMULTI/EXECでのみはの例ハンドル:あなたは、他の変更はあなたのクライアントは、EXECを発行する前に死ぬ
- を
- のRedisはメモリ の外にあります
EXECコマンドを発行した結果、エラーが発生する可能性があります。 EXECを発行すると、Redisはすべてのコマンドをキューに実行し、エラーのリストを返します。 add-to-list-1の動作とadd-to-list-2の失敗のケースは提供されません。あなたはまだ2つのリストが同期していないでしょう。あなたは、発行MULTIを発行した後LPUSHを言うとき、あなたはいつもあなたがない限り、バックOK
を取得します:
- a)の前に)変更または
- Bそのリストには、時計と何かを追加Redisのは、OOM状態を返します。キューに入れられたプッシュコマンドに応答して
いくつか考えられるかもしれないように、DISCARDは機能しません。 DISCARDは、 EXECの代わりにで使用され、ロールバックメカニズムとして使用されません。 EXECを発行すると、トランザクションは完了します。 Redisにはロールバック機構が全くありません。これはRedisの取引についてのものではありません。
Redisがトランザクションと呼ぶものを理解するための鍵は、基本的にクライアント接続レベルでのコマンドキューであることを理解することです。それらはデータベース状態マシンではありません。
- 1. MySQLiトランザクションを使用してロールバックしコミットする方法は?
- 2. ssisでトランザクションをロールバックする方法は?
- 3. RedisでWATCHを使用してZMOVEを実装する
- 4. トランザクションログを使用したトランザクションのロールバック
- 5. トランザクションをロールバックする
- 6. トランザクションをコミットまたはロールバックする方法を知る方法
- 7. ロールバック機能の実装方法は?
- 8. Entity Frameworkでのトランザクションのロールバック方法
- 9. Postgresでトランザクションをロールバックする良い方法は何ですか
- 10. Redisを使用してカウンタでバーストまたはスパイク検出を実装する
- 11. jqueryを使用してドラッグでスクロールを実装する方法
- 12. WPVMでMVVMを使用してフィルタボックスを実装する方法
- 13. C#でDynamicObjectを使用してイベントアクセッサを実装する方法
- 14. typescriptを使用してネイティブスクリプトでObservableを実装する方法
- 15. ServiceStack Redis Clientをタイムアウトで実装する方法
- 16. CodeIgniterでRedisを実装する方法は?
- 17. redisでキーのプレフィックスマッチングを実装する方法は?
- 18. redis/kafka実装で重複を禁止する方法
- 19. エラーが発生した後にトランザクションをロールバックする方法
- 20. カスタムメソッドを実装してSQLAlchemyのクエリで使用する方法
- 21. Spring JDBCでトランザクションをロールバックする方法は?
- 22. Laravel 5.3でトランザクションをロールバックする方法は?
- 23. SQL Serverでトランザクションをロールバックまたはコミットする方法
- 24. @PreUpdateでトランザクションのロールバックを処理する方法
- 25. knexでトランザクションを実装する方法は?
- 26. VoltDBでトランザクションを実装する方法は?
- 27. Mybatisプロジェクトでトランザクション管理を実装する方法
- 28. ビジネスロジック層でトランザクションを実装する方法
- 29. Slick 3:トランザクションでリポジトリパターンを実装する方法は?
- 30. Spring BootアプリケーションでJPAトランザクションを実装する方法は?