Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana menerapkan transaksi dengan rollback di Redis

Jika Anda memerlukan pengembalian transaksi, saya sarankan menggunakan sesuatu selain Redis. Transaksi redis tidak sama dengan datastore lainnya. Bahkan Multi/Exec tidak berfungsi untuk apa yang Anda inginkan - pertama karena tidak ada rollback. Jika Anda ingin mengembalikan, Anda harus menarik kedua daftar sehingga Anda dapat memulihkan - dan berharap bahwa antara kondisi kesalahan kami dan "kembalikan" tidak ada klien lain yang juga mengubah salah satu daftar. Melakukan ini dengan cara yang waras dan dapat diandalkan bukanlah hal yang sepele, juga tidak sederhana. Ini juga mungkin bukan pertanyaan yang bagus untuk SO karena akan sangat luas, dan tidak spesifik untuk Redis.

Sekarang mengapa EXEC tidak melakukan apa yang mungkin dipikirkan orang. Dalam skenario yang Anda usulkan MULTI/EXEC hanya menangani kasus:

  1. Anda menyiapkan WATCHEs untuk memastikan tidak ada perubahan lain yang terjadi
  2. Klien Anda meninggal sebelum mengeluarkan EXEC
  3. Redis kehabisan memori

Sangat mungkin untuk mendapatkan kesalahan sebagai akibat dari mengeluarkan perintah EXEC. Saat Anda mengeluarkan EXEC, Redis akan mengeksekusi semua perintah dalam antrian dan mengembalikan daftar kesalahan. Itu tidak akan memberikan kasus add-to-list-1 berfungsi dan add-to-list-2 gagal. Anda masih memiliki dua daftar yang tidak sinkron. Saat Anda mengeluarkan, ucapkan LPUSH setelah menerbitkan MULTI, Anda akan selalu mendapatkan kembali OK kecuali Anda:

  • a) sebelumnya menambahkan jam tangan dan sesuatu dalam daftar itu berubah atau
  • b) Redis mengembalikan kondisi OOM sebagai respons terhadap perintah push yang diantrekan

DISCARD tidak bekerja seperti yang mungkin dipikirkan beberapa orang. DISCARD digunakan sebagai ganti EXEC, bukan sebagai mekanisme rollback. Setelah Anda mengeluarkan EXEC, transaksi Anda selesai. Redis tidak memiliki mekanisme rollback sama sekali - bukan itu yang dimaksud dengan transaksi Redis.

Kunci untuk memahami apa yang disebut Redis sebagai transaksi adalah menyadari bahwa mereka pada dasarnya adalah antrian perintah di tingkat koneksi klien. Mereka bukan mesin status database.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pembatalan Stack Overflow, Redis, dan Cache

  2. bagaimana saya bisa meneruskan infinity ke redis dari python?

  3. pemindaian redis mengembalikan hasil kosong tetapi kursor bukan nol

  4. Bagaimana cara mengatur cluster elasticache redis sebagai budak?

  5. Kembalikan daftar hgetall dari redis di nodejs