Redis menyimpan data dalam ingatan, dan data akan hilang apabila proses keluar. Melalui mekanisme kegigihan Redis, data dalam memori boleh disimpan pada cakera, dan data boleh dimuatkan daripada fail cakera untuk mengisi semula memori selepas dimulakan semula.
Redis menyokong dua mekanisme kegigihan: RDB cermin penuh dan AOF kegigihan tambahan.
RDB ialah petikan Redis, yang menyimpan semua pasangan nilai kunci yang belum tamat tempoh dalam Redis.
Konfigurasikan RDB dalam redis.conf
:
dbfilename dump.rdb dir /var/lib/redis save 900 1 save 300 10 save 60 10000 save "" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes
Setiap kali proses redis bermula, ia akan menyemak dahulu sama ada fail rdb wujud Jika ia wujud, kandungan fail akan dimuatkan ke dalam ingatan itu.
Apabila redis mengemas kini fail RDB secara automatik, ia akan menghentikan proses kanak-kanak untuk menyimpan petikan dalam tempoh penjimatan, proses utama boleh menyediakan perkhidmatan seperti biasa.
Kami juga boleh menyimpan syot kilat melalui arahan:
save
: Simpan syot kilat dengan cara menyekat dan redis tidak boleh mengendalikan permintaan lain semasa tempoh simpanan
bgsave
: Berhenti proses anak untuk menyelesaikan kerja simpanan Perkhidmatan biasa redis tidak akan terjejas semasa tempoh simpanan. Perintah
lastsave
boleh mendapatkan cap masa penciptaan fail RDB terkini, yang boleh digunakan untuk menyemak sama ada simpanan berjaya.
RDB ialah petikan pangkalan data, dan setiap kali ia dibuat, seluruh pangkalan data perlu ditulis pada fail. Ini adalah operasi yang sangat memakan masa, jadi sukar untuk dilakukan dengan kerap, dan sejumlah besar data mungkin hilang apabila pengecualian berlaku.
Redis menyediakan alat kegigihan tambahan AOF (Lampirkan Sahaja ile). Arahan disimpan dalam fail AOF dalam format protokol komunikasi Redis.
Apabila proses Redis bermula, ia akan menyemak sama ada fail AOF wujud Jika ia wujud, arahan dalam AOF akan dilaksanakan secara berurutan untuk memulihkan data.
Redis akan menambah log pada fail AOF setiap kali ia melaksanakan arahan tulis, tetapi rekod baharu tidak akan ditulis ke cakera serta-merta (fsync) tetapi akan dicache dalam penimbal tulis.
Kami boleh mengkonfigurasi strategi menulis data dalam penimbal ke cakera untuk mengelakkan kehilangan data.
Menulis data dalam penimbal ke cakera ialah operasi yang memakan masa Penulisan cakera yang kerap akan menjejaskan prestasi, tetapi Redis ranap dan kehilangan lebih sedikit data, jadi kami perlu membuat pertukaran berdasarkan senario aplikasi.
AOF mungkin merekodkan arahan yang berlebihan Jika kami melaksanakan arahan yang ditetapkan sebanyak 100 kali untuk kunci yang sama, akan terdapat 100 rekod dalam fail AOF tetapi hanya arahan set terakhir akan dikekalkan untuk memulihkan data. Penulisan semula AOF akan menyusun fail AOF, membersihkan log arahan yang tidak diperlukan (seperti memadamkan arahan set yang ditimpa), dan mengurangkan saiz fail AOF.
Redis menggunakan strategi penulisan semula latar belakang, iaitu, memotong proses anak untuk menulis AOF yang diisih ke dalam fail sementara. Gunakan BGREWRITEAOF
untuk mencetuskan operasi penulisan semula latar belakang secara manual.
Malah, penulisan semula AOF tidak akan membaca fail AOF asal Proses anak akan mempunyai salinan data semasa dan terus menjana fail AOF baharu berdasarkan salinan.
Semasa tempoh penulisan semula, proses utama menulis operasi tulis baharu ke dalam fail AOF asal dan cache tulis semula AOF Walaupun penulisan semula gagal, fail AOF asal masih menyimpan data lengkap. Apabila proses anak menyelesaikan penulisan semula AOF, ia akan menghantar isyarat kepada proses utama Selepas menerima isyarat, proses utama akan menulis kandungan cache penulisan semula AOF ke dalam fail AOF baharu, dan kemudian menulis ganti fail asal dengan fail baharu. fail AOF.
Konfigurasikan AOF dalam redis.conf
:
appendonly yes appendfilename appendonly.aof appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
Redis akan merekodkan saiz fail AOF semasa permulaan atau selepas penulisan semula terakhir Jika saiz data baharu mencapai 100% daripada yang asal saiz ( konfigurasi auto-aof-rewrite-percentage) mencetuskan penulisan semula.
Operasi penulisan semula hanya akan dilakukan apabila saiz fail AOF semasa lebih besar daripada saiz auto-aof-rewrite-min-size. Jika tidak, penulisan semula tidak akan dilakukan walaupun jumlah data baharu melebihi peratusan yang ditentukan . Ini mengelakkan masalah penulisan semula awal yang kerap disebabkan oleh fail asal terlalu kecil.
Atas ialah kandungan terperinci Contoh analisis mekanisme kegigihan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!