Rumah >pangkalan data >Redis >Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

青灯夜游
青灯夜游ke hadapan
2022-01-22 09:26:462399semak imbas

Adakah transaksi Redis menyokong ACID? Artikel berikut akan membawa anda memahami urus niaga Redis, memperkenalkan cara Redis melaksanakan urus niaga dan bercakap tentang sama ada transaksi Redis menyokong ACID. Saya harap ia akan membantu anda.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Pewawancara Tencent: "Adakah anda memahami urus niaga Redis? Bolehkah mekanisme transaksinya merealisasikan sifat ACID

Cheng Xuyuan : "Menggaruk kepala saya, ini... Saya tahu skrip Lua boleh melaksanakan transaksi..."

Penemuduga Tencent: "Baiklah, balik dan tunggu pemberitahuan


Ma Ge , saya mendapat banyak tawaran, tetapi saya tidak sangka akhirnya saya kalah dalam soalan "Bagaimana Redis melaksanakan transaksi?"

Mari kita analisa langkah demi langkah:

  • Apakah itu ACID transaksi?

  • Bagaimana Redis melaksanakan transaksi?

  • Apakah sifat yang boleh dicapai oleh transaksi Redis?

  • Pelaksanaan skrip Lua.

Apakah ACID of affairs?

Kapten Mojin dalam Hantu Meniup Tanglung "Lembah Serangga Yunnan" mempunyai pepatah yang dipanggil " He Ze" "Hidup, bahagian, mati." Untuk mencari Muchen Bead, mereka bertiga mempunyai pembahagian kerja yang jelas dan bekerjasama untuk maju dan berundur bersama untuk berjaya.

Transaksi ialah unit kawalan serentak, yang terdiri daripada urutan operasi sama ada semua operasi ini dilaksanakan atau tiada satu pun daripadanya dilaksanakan. [Cadangan berkaitan: Tutorial video Redis]

"Ia ialah unit kerja yang tidak boleh dibahagikan."

Apabila transaksi dilaksanakan, ia akan memberikan jaminan atribut khas:

  • Atomicity: berbilang operasi transaksi mesti diselesaikan, atau tiada satu pun daripadanya mesti diselesaikan ( ps: Bagaimana MySQL mencapai atomicity? Komen dalam kawasan mesej adalah dialu-alukan); Perintah sebelum dan selepas pelaksanaan adalah semua keadaan data undang-undang.

  • Kekangan integriti pangkalan data termasuk tetapi tidak terhad kepada:
  • Integriti entiti (seperti kunci utama baris wujud dan unik); Integriti lajur (seperti medan Jenis, saiz dan panjang mesti memenuhi keperluan)

    Kekangan kunci asing
    • Integriti yang ditentukan pengguna (contohnya, jumlah baki kedua-dua; akaun hendaklah kekal tidak berubah sebelum dan selepas pemindahan).
    • Pengasingan: Operasi dalam urus niaga diasingkan daripada urus niaga lain dan urus niaga yang dilaksanakan serentak tidak boleh mengganggu satu sama lain.
    • memfokuskan pada interaksi antara transaksi yang berbeza Pengasingan ketat sepadan dengan boleh bersiri (Boleh Bersiri) dalam tahap pengasingan.
  • Ketahanan: Setelah transaksi dilakukan, semua pengubahsuaian akan disimpan secara kekal dalam pangkalan data dan data tidak akan hilang walaupun sistem ranap dan dimulakan semula.

  • Code Brother, setelah memahami keperluan khusus ACID, bagaimana Redis melaksanakan mekanisme transaksi?

Bagaimana Redis melaksanakan transaksi

MULTI

, EXEC,

BUANG

dan Perintah 🎜>TONTON adalah asas untuk Redis melaksanakan transaksi. Proses pelaksanaan transaksi Redis terdiri daripada tiga langkah: Buka transaksi;

Lakukan transaksi atau buang;

  • Buka transaksi secara eksplisit
  • Pelanggan Yang pelanggan secara eksplisit memulakan urus niaga melalui perintah
  • , dan arahan seterusnya akan beratur dan dicache dan tidak akan dilaksanakan sebenarnya.

Baris gilir perintah

Pelanggan menghantar satu siri arahan untuk dilaksanakan dalam transaksi kepada pelayan.

Perlu diambil perhatian bahawa walaupun arahan dihantar ke pelayan, tika Redis hanya menyimpan sementara siri arahan ini dalam baris gilir arahan dan tidak akan melaksanakannya dengan serta-merta.

MULTI

Laksanakan transaksi atau buangPelanggan menghantar arahan untuk menyerahkan atau membuang transaksi ke pelayan, dan biarkan Redis melaksanakan arahan yang dihantar dalam langkah kedua Arahan khusus atau arahan baris gilir yang jelas, hentikan pelaksanaan.

Redis boleh menjadualkan pelaksanaan perintah baris gilir hanya apabila

EXEC

dipanggil.

Anda juga boleh menggunakan BUANG untuk membuang arahan yang disimpan dalam baris gilir dalam langkah kedua.

Kes transaksi Redis

Laksanakan kod sampel kami melalui tapak web penyahpepijatan dalam talian: try.redis.io

Laksanakan seperti biasa

melalui MULTI dan EXEC Jalankan proses transaksi:

# 开启事务
> MULTI
OK
# 开始定义一些列指令
> SET “公众号:码哥字节” "粉丝 100 万"
QUEUED
> SET "order" "30"
QUEUED
> SET "文章数" 666
QUEUED
> GET "文章数"
QUEUED
# 实际执行事务
> EXEC
1) OK
2) OK
3) OK
4) "666"

Kami melihat hasil pulangan selepas setiap arahan baca dan tulis dilaksanakan ialah QUEUED, yang bermaksud terima kasih Operasi telah disimpan sementara dalam baris gilir arahan , dan tiada pelaksanaan sebenar.

Apabila perintah EXEC dilaksanakan, anda boleh melihat data tindak balas setiap arahan.

Tinggalkan transaksi

Buang arahan baris gilir melalui MULTI dan DISCARD:

# 初始化订单数
> SET "order:mobile" 100
OK
# 开启事务
> MULTI
OK
# 订单 - 1
> DECR "order:mobile"
QUEUED
# 丢弃丢列命令
> DISCARD
OK
# 数据没有被修改
> GET "order:mobile"
"100"

Ma Ge, transaksi Redis Boleh Sifat ASID dijamin?

Ini soalan yang bagus, mari kita menganalisisnya bersama-sama.

Adakah transaksi Redis memuaskan ACID?

Transaksi Redis boleh melaksanakan berbilang arahan pada satu masa, dan disertakan dengan tiga jaminan penting berikut:

  • Arahan kelompok sedang dijalankan dilaksanakan Perintah EXEC akan dimasukkan ke dalam baris gilir untuk storan sementara sebelum; perintah yang tinggal masih akan dilaksanakan;

  • Semasa pelaksanaan transaksi, arahan yang diserahkan oleh pelanggan lain tidak akan dimasukkan ke dalam urutan pelaksanaan perintah semasa.

  • Atomicity

Kod Abang, jika ralat berlaku semasa pelaksanaan transaksi, prestasi atom dijamin Apa ?

Semasa transaksi, dua jenis ralat arahan mungkin dihadapi:

Arahan yang dihantar sebelum melaksanakan perintah

itu sendiri adalah salah. Seperti berikut:

    Bilangan parameter salah;
  • EXECNama arahan salah dan arahan yang tidak wujud digunakan
    • Memori tidak mencukupi (contoh Redis menggunakan
    • arahan untuk mengkonfigurasi had ingatan).
    • maxmemorySelepas melaksanakan perintah
    • , arahan itu mungkin gagal. Contohnya, jenis data perintah dan operasi tidak sepadan (operasi senarai Senarai dilakukan pada nilai jenis Rentetan
  • apabila melaksanakan perintah
  • transaksi. Kegagalan berlaku dalam contoh Redis, menyebabkan pelaksanaan transaksi gagal. EXEC
  • EXECEXEC melaporkan ralat sebelum pelaksanaan

Apabila arahan dibariskan dalam baris gilir, Redis akan melaporkan ralat dan merekodkan ralat itu.

Pada masa ini, kami masih boleh terus menyerahkan operasi arahan.

Selepas melaksanakan perintah , Redis akan menolak untuk melaksanakan semua operasi arahan yang diserahkan dan mengembalikan hasil kegagalan transaksi

.

EXECDengan cara ini, semua arahan dalam transaksi tidak akan dilaksanakan lagi, memastikan atomicity.

Berikut ialah contoh ralat dalam perintah beratur, menyebabkan kegagalan transaksi:

EXEC melaporkan ralat selepas pelaksanaan

#开启事务
> MULTI
OK
#发送事务中的第一个操作,但是Redis不支持该命令,返回报错信息
127.0.0.1:6379> PUT order 6
(error) ERR unknown command `PUT`, with args beginning with: `order`, `6`,
#发送事务中的第二个操作,这个操作是正确的命令,Redis把该命令入队
> DECR b:stock
QUEUED
#实际执行事务,但是之前命令有错误,所以Redis拒绝执行
> EXEC
(error) EXECABORT Transaction discarded because of previous errors.

Operasi transaksi Semasa beratur, jenis data arahan dan operasi tidak sepadan, tetapi tika Redis tidak mengesan ralat. Walau bagaimanapun, selepas melaksanakan arahan EXEC, Redis akan melaporkan ralat apabila ia benar-benar melaksanakan arahan ini.

Ketuk pada papan hitam: Walaupun Redis akan melaporkan ralat untuk arahan yang salah, urus niaga masih akan melaksanakan perintah yang betul Pada masa ini, atomicity transaksi tidak dapat dijamin!

Ma Ge, mengapa Redis tidak menyokong rollback?

Sebenarnya, Redis tidak menyediakan mekanisme rollback. Walaupun Redis menyediakan arahan DISCARD.

Walau bagaimanapun, arahan ini hanya boleh digunakan untuk secara aktif meninggalkan pelaksanaan transaksi dan mengosongkan baris gilir perintah sementara, dan tidak mempunyai kesan gulung balik.

Kegagalan berlaku semasa pelaksanaan EXEC

Jika Redis menghidupkan log AOF, maka hanya sebahagian daripada operasi transaksi akan direkodkan dalam log AOF. Kami perlu menggunakan alat redis-check-aof untuk menyemak fail log AOF Alat ini boleh mengalih keluar operasi transaksi yang belum selesai daripada fail AOF.

Dengan cara ini, selepas kami menggunakan AOF untuk memulihkan kejadian, operasi transaksi tidak akan dilaksanakan lagi, sekali gus memastikan atomicity.

Ringkasan ringkas

:

Ralat akan dilaporkan apabila perintah itu dimasukkan ke dalam baris gilir, dan pelaksanaan transaksi akan ditinggalkan untuk memastikan atomicity; > Apabila arahan dimasukkan ke dalam baris gilir Tiada ralat dilaporkan, tetapi ralat dilaporkan semasa pelaksanaan sebenar, dan atomicity tidak dijamin

Instance gagal apabila arahan EXEC dilaksanakan Jika log AOF dihidupkan, atomicity boleh dijamin.
  • Ketekalan

Konsistensi akan dipengaruhi oleh arahan yang salah dan masa kegagalan contoh, akan berlaku menjadi dua kegagalan contoh Masa kejadian dimensi boleh dianalisis dalam tiga situasi. Sebelum pelaksanaan EXEC, ralat akan dilaporkan selepas menyertai baris gilir

Transaksi akan ditinggalkan, jadi konsistensi boleh dijamin.

Selepas EXEC dilaksanakan, ralat akan dilaporkan semasa pelaksanaan sebenar

Pelaksanaan dengan ralat tidak akan dilaksanakan seperti biasa konsistensi boleh dijamin.

Apabila EXEC dilaksanakan, instance gagal

Selepas instance gagal, ia akan dimulakan semula Ini berkaitan dengan kaedah pemulihan data RDB atau AOF akan dibincangkan mengikut kes.

Jika kami tidak mendayakan RDB atau AOF, maka selepas kejadian gagal dan dimulakan semula, data akan hilang dan pangkalan data akan konsisten.

Jika kita menggunakan petikan RDB, kerana petikan RDB tidak akan dilaksanakan apabila transaksi dilaksanakan.

Oleh itu, hasil operasi arahan transaksi tidak akan disimpan ke petikan RDB Apabila menggunakan petikan RDB untuk pemulihan, data dalam pangkalan data akan konsisten.

Jika kami menggunakan log AOF dan contoh gagal sebelum operasi transaksi direkodkan dalam log AOF, maka data pangkalan data yang dipulihkan menggunakan log AOF akan konsisten.

Jika hanya beberapa operasi direkodkan dalam log AOF, kami boleh menggunakan redis-check-aof untuk mengosongkan operasi yang telah selesai dalam transaksi, dan pangkalan data akan konsisten selepas pemulihan.

Pengasingan

Pelaksanaan transaksi boleh dibahagikan kepada perintah beratur (sebelum arahan EXEC dilaksanakan) dan perintah pelaksanaan sebenar (selepas arahan EXEC dilaksanakan) Dua peringkat.

Jadi semasa pelaksanaan serentak, kami menganalisis kedua-dua peringkat ini dalam dua situasi:

  • Operasi serentak dilaksanakan sebelum perintah EXEC dan pengasingan perlu diluluskan WATCH Mekanisme dijamin;

  • Operasi serentak selepas perintah EXEC, pengasingan boleh dijamin.

Saudara Kod, apakah mekanisme WATCH?

Mari fokus pada situasi pertama: apabila perintah EXEC sesuatu transaksi belum dilaksanakan, operasi perintah transaksi disimpan sementara dalam baris gilir perintah.

Pada masa ini, jika terdapat operasi serentak lain dan kunci yang sama diubah suai, anda perlu menyemak sama ada transaksi menggunakan mekanisme WATCH.

Fungsi mekanisme WATCH adalah untuk memantau perubahan nilai satu atau lebih kunci sebelum transaksi dilaksanakan Apabila transaksi memanggil arahan EXEC untuk melaksanakan, mekanisme WATCH akan menyemak dahulu sama ada kunci yang dipantau mempunyai. telah diubah suai oleh pelanggan lain.

Jika diubah suai, pelaksanaan transaksi akan ditinggalkan untuk mengelakkan pengasingan transaksi daripada dimusnahkan.

Pada masa yang sama, pelanggan boleh melaksanakan transaksi semula Pada masa ini, jika tiada operasi serentak untuk mengubah suai data transaksi, transaksi boleh dilaksanakan secara normal, dan pengasingan juga dijamin. .

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Tiada WATCH

Jika tiada mekanisme WATCH, operasi serentak membaca dan menulis data sebelum arahan EXEC dilaksanakan.

Apabila EXEC dilaksanakan, data yang akan dikendalikan dalam transaksi telah berubah dan Redis tidak mengasingkan transaksi.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Operasi serentak diterima dan dilaksanakan selepas EXEC

Bagi kes kedua, kerana Redis menggunakan satu utas untuk melaksanakan arahan , dan , selepas arahan EXEC dilaksanakan, Redis akan memastikan semua arahan dalam baris gilir arahan dilaksanakan terlebih dahulu sebelum melaksanakan arahan seterusnya.

Jadi, dalam kes ini, operasi serentak tidak akan memecahkan pengasingan transaksi.

Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?

Kegigihan

Jika Redis tidak menggunakan RDB atau AOF, maka atribut kegigihan transaksi mesti Tiada jaminan.

Jika Redis menggunakan mod RDB, maka selepas transaksi dilaksanakan tetapi sebelum petikan RDB seterusnya dilaksanakan, jika ranap kejadian berlaku dan data hilang, dalam kes ini, Data pengubahsuaian transaksi juga tidak dijamin untuk tahan lama.

Jika Redis menggunakan mod AOF, akan berlaku kehilangan data kerana tiga pilihan konfigurasi mod AOF: tidak, setiap saat dan sentiasa.

Oleh itu, sifat ketahanan transaksi masih tidak terjamin.

Tidak kira apa mod kegigihan yang diguna pakai Redis, sifat ketahanan transaksi tidak dijamin.

Ringkasan

  • Redis mempunyai tahap atomiti tertentu, tetapi tidak menyokong pemulangan semula.
  • Redis tidak mempunyai konsep konsistensi dalam ASID. (Atau mungkin Redis mengabaikan perkara ini semasa mereka bentuk)
  • Redis diasingkan.
  • Redis tidak menjamin ketahanan.

Mekanisme transaksi Redis boleh menjamin konsistensi dan pengasingan, tetapi ia tidak dapat menjamin ketahanan.

Walau bagaimanapun, kerana Redis sendiri adalah pangkalan data dalam memori, kegigihan bukanlah atribut yang diperlukan Kami lebih mengambil berat tentang tiga sifat atomicity, konsistensi dan pengasingan.

Situasi atomicity lebih rumit Apabila sintaks arahan yang digunakan dalam transaksi tidak betul, atomicity tidak dijamin Dalam kes lain, transaksi boleh dilaksanakan secara atom.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam