Apakah ACID transaksi? Bolehkah urus niaga Redis melaksanakan ACID?
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.
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?
MULTI
, EXEC,
BUANGdan 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.
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
EXECdipanggil.
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 Kami melihat hasil pulangan selepas setiap arahan baca dan tulis dilaksanakan ialah Apabila perintah Tinggalkan transaksi Buang arahan baris gilir melalui Ma Ge, transaksi Redis Boleh Sifat ASID dijamin? Ini soalan yang bagus, mari kita menganalisisnya bersama-sama. 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. Kod Abang, jika ralat berlaku semasa pelaksanaan transaksi, prestasi atom dijamin Apa ? itu sendiri adalah salah. Seperti berikut: 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 Berikut ialah contoh ralat dalam perintah beratur, menyebabkan kegagalan transaksi: EXEC melaporkan ralat selepas pelaksanaan 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. Ma Ge, mengapa Redis tidak menyokong rollback? 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. : 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 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 Operasi serentak selepas perintah 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 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. . 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. 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. 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 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! ! 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"
QUEUED
, yang bermaksud terima kasih Operasi telah disimpan sementara dalam baris gilir arahan , dan tiada pelaksanaan sebenar. EXEC
dilaksanakan, anda boleh melihat data tindak balas setiap arahan. MULTI
dan DISCARD
: # 初始化订单数
> SET "order:mobile" 100
OK
# 开启事务
> MULTI
OK
# 订单 - 1
> DECR "order:mobile"
QUEUED
# 丢弃丢列命令
> DISCARD
OK
# 数据没有被修改
> GET "order:mobile"
"100"
Adakah transaksi Redis memuaskan ACID?
Semasa transaksi, dua jenis ralat arahan mungkin dihadapi:
Arahan yang dihantar sebelum melaksanakan perintah Bilangan parameter salah;
EXEC
Nama arahan salah dan arahan yang tidak wujud digunakan maxmemory
Selepas melaksanakan perintah EXEC
EXEC
EXEC melaporkan ralat sebelum pelaksanaanEXEC
Dengan cara ini, semua arahan dalam transaksi tidak akan dilaksanakan lagi, memastikan atomicity. #开启事务
> 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.
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
EXEC
dan pengasingan perlu diluluskan WATCH
Mekanisme dijamin; EXEC
, pengasingan boleh dijamin. WATCH
.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Redis menggunakan jadual hash untuk menyimpan data dan menyokong struktur data seperti rentetan, senarai, jadual hash, koleksi dan koleksi yang diperintahkan. Redis berterusan data melalui snapshots (RDB) dan menambah mekanisme tulis sahaja (AOF). Redis menggunakan replikasi master-hamba untuk meningkatkan ketersediaan data. Redis menggunakan gelung acara tunggal untuk mengendalikan sambungan dan arahan untuk memastikan atom dan konsistensi data. Redis menetapkan masa tamat tempoh untuk kunci dan menggunakan mekanisme memadam malas untuk memadamkan kunci tamat tempoh.

Langkah-langkah untuk menyelesaikan masalah yang tidak dapat dijumpai oleh Redis-Server: periksa pemasangan untuk memastikan Redis dipasang dengan betul; Tetapkan pembolehubah persekitaran redis_host dan redis_port; Mulakan Redis Server Redis-server; Semak sama ada pelayan sedang menjalankan ping redis-cli.

Untuk melihat semua kunci di Redis, terdapat tiga cara: Gunakan perintah kunci untuk mengembalikan semua kunci yang sepadan dengan corak yang ditentukan; Gunakan perintah imbasan untuk melangkah ke atas kunci dan kembalikan satu set kunci; Gunakan arahan maklumat untuk mendapatkan jumlah kunci.

Untuk melihat nombor versi REDIS, anda boleh menggunakan tiga kaedah berikut: (1) Masukkan arahan INFO, (2) Mulakan pelayan dengan pilihan --version, dan (3) Lihat fail konfigurasi.

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Redis memerintahkan set (ZSET) digunakan untuk menyimpan elemen yang diperintahkan dan disusun mengikut skor yang berkaitan. Langkah -langkah untuk menggunakan ZSET termasuk: 1. Buat zset; 2. Tambah ahli; 3. Dapatkan skor ahli; 4. Dapatkan kedudukan; 5. Dapatkan ahli dalam julat ranking; 6. Padam ahli; 7. Dapatkan bilangan elemen; 8. Dapatkan bilangan ahli dalam julat skor.
