Rumah  >  Artikel  >  pangkalan data  >  Mari bercakap tentang acara fail redis dan peristiwa masa

Mari bercakap tentang acara fail redis dan peristiwa masa

WBOY
WBOYke hadapan
2022-03-08 17:20:171906semak imbas

Artikel ini membawa anda pengetahuan yang berkaitan tentang Redis, yang terutamanya memperkenalkan isu yang berkaitan dengan peristiwa fail dan peristiwa masa ialah pengabstrakan operasi soket oleh pelayan, dan peristiwa masa Ia adalah pengabstrakan operasi pemasaan seperti ini oleh pelayan saya harap ia akan membantu semua orang.

Mari bercakap tentang acara fail redis dan peristiwa masa

Pembelajaran yang disyorkan: Tutorial Redis

Redis adalah benang tunggal sebelum 6.0 Selepas 6.0, anda boleh mendayakan berbilang rangkaian melalui fail konfigurasi. Benang, berbilang benang selepas 6.0 merujuk kepada penggunaan berbilang benang untuk pelaksanaan dalam io untuk mempercepatkan I/O.

Pelayan Redis ialah program dipacu peristiwa Pelayan perlu mengendalikan dua jenis acara berikut:

  • Acara fail (acara fail)
    Pelayan Redis berkomunikasi. dengan pelanggan melalui soket ( Atau pelayan Redis lain) untuk menyambung, dan peristiwa fail adalah pengabstrakan operasi soket oleh pelayan. Komunikasi antara pelayan dan klien (atau pelayan lain) akan menjana peristiwa fail yang sepadan, dan pelayan akan menyelesaikan satu siri operasi komunikasi rangkaian dengan mendengar dan memproses peristiwa ini. Pengendali acara fail menggunakan program pemultipleksan I/O (penmultipleksan) untuk mendengar berbilang soket pada masa yang sama dan mengaitkan pengendali acara yang berbeza dengan soket berdasarkan tugasan yang sedang dijalankan oleh peranti. Apabila soket yang dipantau bersedia untuk melakukan operasi seperti tindak balas sambungan (terima), baca (baca), tulis (tulis), tutup (tutup), dan lain-lain, acara fail yang sepadan dengan operasi akan dihasilkan Pada masa ini, fail Pengendali acara akan memanggil pengendali acara yang dikaitkan dengan soket sebelum ini untuk mengendalikan acara ini.
  • Acara masa (peristiwa masa)
    Beberapa operasi dalam pelayan Redis (seperti fungsi serverCron) perlu dilaksanakan pada titik masa tertentu, dan peristiwa masa ialah abstraksi pelayan bagi pemasaan sedemikian operasi. Peristiwa masa terbahagi kepada dua kategori Jenis pertama ialah acara bermasa (membolehkan program dilaksanakan sekali selepas masa tertentu) dan jenis lain ialah acara berkala (membolehkan program dilaksanakan sekali setiap masa yang ditentukan).

1. Acara fail

1. Pemproses acara fail

Pemproses acara fail terdiri daripada empat bahagian: soket, Multiplexer I/O, penghantar acara fail , pengendali acara.
Mari bercakap tentang acara fail redis dan peristiwa masa
Pemultipleks I/O bertanggungjawab untuk mendengar berbilang soket dan menghantar soket tersebut yang menjana peristiwa kepada penghantar acara fail. Walaupun berbilang peristiwa fail mungkin berlaku serentak, pemultipleks I/O tunggal akan sentiasa meletakkan semua soket peristiwa yang dijana ke dalam baris gilir, dan kemudian melalui baris gilir ini secara teratur dan segerak Soket penghantaran dihantar ke satu soket acara fail suatu masa. Apabila peristiwa yang dijana oleh soket sebelumnya diproses (pemprosesan peristiwa yang dikaitkan dengan soket selesai), pemultipleks I/O akan terus menghantar soket seterusnya kepada penghantar peristiwa fail Penghantar peristiwa fail menerima soket daripada I /O pemultipleks dan menggunakan pengendali peristiwa yang sepadan mengikut jenis peristiwa yang dihasilkan oleh soket Pelayan akan melaksanakan perkaitan soket yang berbeza untuk pengendali acara yang berbeza, pengendali ini menentukan tindakan yang harus dilakukan oleh pelayan apabila sesuatu peristiwa berlaku.

2. Pemultipleksan I/O

Semua fungsi program pemultipleksan Redis dibungkus oleh pemultipleksan I/O pilih, epoll, evport dan kqueue

dilaksanakan oleh perpustakaan fungsi 3. Jenis acara fail

  • Acara AE_READABLE
    Apabila soket menjadi boleh dibaca (pelanggan melakukan operasi tulis atau tutup ) atau apabila soket baharu yang boleh bertindak balas muncul, soket akan menjana acara AE_READABLE.

  • Acara AE_WAITABLE
    Apabila soket boleh ditulis (pelanggan melakukan operasi baca), acara AE_WAITABLE akan dijana
    Pemultipleks I/O akan serentak Mendengar Acara AE_READABLE dan acara AE_WAITABLE Jika soket menjana kedua-dua acara pada masa yang sama, penghantar acara akan mengutamakan acara AE_READABLE, yang bermaksud bahawa pelayan akan membaca soket terlebih dahulu dan kemudian menulis soket.

4. Pemproses acara fail

  • Pemproses tindak balas sambungan
    Pemproses tindak balas sambungan, pemproses ini digunakan untuk pelanggan yang menyambung ke soket pendengaran pelayan Pelanggan bertindak balas. Apabila pelayan Redis dimulakan, program akan mengaitkan pemproses tindak balas sambungan ini dengan peristiwa AE_READABLE bagi soket mendengar pelayan Apabila pelanggan menyambung ke soket mendengar pelayan, soket akan dijana Peristiwa AE_READABLE mencetuskan pelaksanaan sambungan pemproses tindak balas dan melaksanakan operasi tindak balas soket yang sepadan.
  • Pengendali permintaan arahan
    Apabila pelanggan berjaya menyambung ke pelayan melalui pengendali tindak balas sambungan, pelayan akan mengaitkan peristiwa AE_READABLE soket dengan pengendali permintaan arahan Apabila pelanggan meminta Apabila pelayan menghantar permintaan arahan, soket akan menjana peristiwa AE_READABLE, menyebabkan pemproses permintaan arahan untuk melaksanakan dan melaksanakan operasi seperti bacaan soket. Semasa keseluruhan proses klien menyambung ke pelayan, pelayan akan sentiasa mengaitkan pengendali permintaan arahan untuk acara AE_READABEL soket klien.
  • Pemproses balasan arahan
    Apabila pelayan mempunyai balasan arahan yang perlu dihantar kepada klien, pelayan akan mengaitkan acara AE_WRITABLE soket klien dengan pemproses balasan arahan Apabila klien sudah bersedia untuk menerima Apabila pelayan mengembalikan balasan arahan, peristiwa AE_WAITABEL akan dijana, menyebabkan pemproses balasan arahan melaksanakan dan melaksanakan operasi tulis soket yang sepadan. Apabila balasan arahan dihantar, pelayan akan menyahkaitan pengendali balasan arahan daripada acara AE_WAITABLE soket klien.

5. Contoh acara sambungan pelayan-pelayan sekali selesai

Mula-mula, klien Redis memulakan sambungan ke pelayan, kemudian soket mendengar akan menjana acara AE_READABEL, mencetuskan pemprosesan tindak balas sambungan Apabila pemproses dilaksanakan, pemproses akan bertindak balas kepada permintaan sambungan klien, kemudian mencipta soket klien dan status klien, dan mengaitkan peristiwa AE_REAADABEL soket klien dengan pemproses permintaan arahan supaya klien boleh The master pelayan menghantar permintaan arahan.

Dengan mengandaikan bahawa klien menghantar permintaan arahan ke pelayan utama, soket klien akan menjana peristiwa AE_READABEL, mencetuskan pemproses permintaan arahan untuk melaksanakan pemproses membaca arahan klien dan kemudian menghantarnya kepada program yang berkaitan untuk melaksanakan.

Melaksanakan arahan akan menghasilkan balasan arahan yang sepadan Untuk menghantar baris balasan arahan ini kembali kepada klien, pelayan akan mengaitkan acara AE_WAITABLE dengan pemproses balasan arahan. Apabila pelanggan cuba membaca balasan arahan, pelanggan akan menjana acara AE_WAITABLE, mencetuskan pelaksanaan pemproses balasan arahan Apabila pemproses balasan arahan menulis balasan arahan ke soket dalam keseluruhan pelayan, pelayan akan melepaskan klien soket. Acara AE_WAITABLE dikaitkan dengan pelaksanaan pengendali balasan arahan.

2. Acara masa

1. Komposisi acara masa

  • id
    Pelayan mencipta ID unik global untuk acara masa. Nombor ID meningkat mengikut tertib dari kecil ke besar.
  • bila
    Cap masa UNIX dengan ketepatan milisaat yang merekodkan masa ketibaan acara masa.
  • timeProc
    Pemproses acara masa, satu fungsi. Apabila acara masa tiba, pelayan memanggil pemproses yang sepadan untuk mengendalikan acara tersebut.

Sama ada acara masa ialah acara bermasa atau acara berkala bergantung pada nilai pulangan pemproses acara masa Jika pemproses acara mengembalikan ae.h/AE_NOMORE, maka acara itu adalah acara bermasa . Acara adalah Selepas tiba sekali, ia akan dipadamkan dan tidak akan dicapai lagi. Jika pengendali peristiwa mengembalikan nilai integer selain daripada AE_NOMORE, maka peristiwa itu adalah peristiwa berkala Apabila peristiwa masa dicapai, pelayan akan mengemas kini atribut bila peristiwa berdasarkan nilai pulangan pengendali peristiwa, supaya peristiwa itu. acara akan berterusan untuk tempoh masa Ia tiba semula selepas tempoh masa tertentu dan dikemas kini dan dijalankan dengan cara ini.

Pelaksanaan

Pelayan meletakkan semua peristiwa masa dalam senarai terpaut tidak tertib (Yang tidak tertib tidak merujuk kepada medan id, tetapi medan bila, jadi ia mesti dilalui setiap kali ia dilaksanakan Lengkapkan senarai terpaut ), bila-bila masa pelaksana acara berjalan, ia akan melintasi keseluruhan senarai terpaut, mencari semua acara yang telah tiba dan memanggil pengendali acara yang sepadan.
Apa yang perlu diterangkan di sini ialah walaupun ia adalah senarai terpaut yang tidak tersusun, panjang senarai terpaut tidak terlalu panjang dalam mod biasa, pelayan Redis hanya menggunakan serverCron sebagai peristiwa masa, jadi tempat ini akan merosot ke dalam peranan penunjuk Dalam mod penanda aras, pelayan Hanya dua peristiwa masa digunakan, jadi kesan traversal penuh pada prestasi boleh diabaikan.

Fungsi serverCron

Pelayan Redis yang sedang berjalan perlu kerap menyemak dan melaraskan sumber dan statusnya sendiri untuk memastikan bahawa pelayan boleh berjalan dalam jangka panjang dan stabil ini dilakukan oleh redis .c/ Fungsi serverCron bertanggungjawab untuk melaksanakan tugas utamanya termasuk:

  • Kemas kini pelbagai maklumat statistik pelayan, seperti masa, penggunaan memori, penggunaan pangkalan data, dsb.
  • Bersihkan pasangan nilai kunci yang telah tamat tempoh dalam pangkalan data.
  • Tutup dan bersihkan pelanggan dengan sambungan yang gagal.
  • Cuba lakukan operasi kegigihan AOF atau RDB.
  • Jika pelayan ialah pelayan induk, kemudian lakukan penyegerakan biasa pada pelayan hamba
  • Jika dalam mod kluster, lakukan penyegerakan biasa dan ujian sambungan pada kluster.

Penjadualan dan Pelaksanaan Acara

Oleh kerana terdapat kedua-dua peristiwa fail dan peristiwa masa dalam pelayan, pelayan mesti menjadualkan kedua-dua acara ini dan memutuskan bila ia perlu Memproses acara fail, bilakah sepatutnya peristiwa masa diproses, berapa banyak masa yang perlu dibelanjakan untuk memprosesnya, dsb.
Pseudokod proses pemprosesan adalah seperti berikut:

def aeProcessEvents():
	# 获取到达时间离当前最近的时间事件
	tem_event = aeSearchNearestTimer()
	
	# 计算上一步获得到的事件 距离到达还有多少秒
	remaind_ms = time_event.when - unix_ts_now()
	
	# 如果事件已经到达, 那么remaind_ms的值可能为负数,设置为0
	remaind_ms = max(remaind_ms, 0)
	
	# 阻塞并等待文件事件产生,最大阻塞时间由timeval结构决定,
	# 如果remaind_ms的值为0,那么aeAPiPoll调用之后马上返回,不阻塞
	aeApiPoll(timeval)
	# 处理所有已经产生的文件事件
	processFileEvents()
	# 处理所有已经到达的时间事件
	proccessTimeEvents()

Penjadualan acara dan peraturan pelaksanaan:
1) Masa sekatan maksimum fungsi aeApiPoll ditentukan oleh peristiwa masa yang masa ketibaannya paling hampir dengan masa semasa Ini Kaedah ini bukan sahaja boleh menghalang pelayan daripada kerap mengundi acara masa (sibuk menunggu), tetapi juga memastikan bahawa fungsi aeApiPoll tidak akan menyekat terlalu lama.

2) Oleh kerana acara fail muncul secara rawak, jika tiada acara masa tiba selepas menunggu dan memproses acara fail, pelayan akan menunggu dan memproses acara fail itu semula. Apabila acara fail terus dilaksanakan, masa akan beransur-ansur menghampiri masa ketibaan yang ditetapkan oleh peristiwa masa, dan akhirnya mencapai masa ketibaan Pada masa ini, pelayan boleh mula memproses acara masa ketibaan.

3) Pemprosesan peristiwa fail dan peristiwa masa dilaksanakan secara serentak, teratur dan secara atom Pelayan tidak akan mengganggu pemprosesan acara di tengah jalan, dan ia tidak akan mendahului peristiwa pemproses atau pemproses acara masa akan mengurangkan masa menyekat program sebanyak mungkin dan secara aktif melepaskan hak pelaksanaan apabila perlu, dengan itu mengurangkan kemungkinan kebuluran acara. Sebagai contoh, apabila pemproses balasan arahan menulis balasan arahan kepada soket klien, jika bilangan bait bertulis melebihi pemalar pratetap, pemproses balasan arahan akan menggunakan pemecahan secara aktif untuk keluar dari gelung penulisan ditulis kali seterusnya; sebagai tambahan, peristiwa masa juga akan meletakkan operasi kegigihan yang memakan masa ke dalam sub-benang atau sub-proses untuk pelaksanaan.

4) Oleh kerana peristiwa masa dilaksanakan selepas peristiwa fail, dan tiada preemption antara peristiwa, masa pemprosesan sebenar peristiwa masa biasanya lewat sedikit daripada masa ketibaan yang ditetapkan oleh peristiwa masa.

Terdapat hubungan kerjasama antara acara fail dan peristiwa masa Pelayan akan mengendalikan kedua-dua acara ini secara bergilir-gilir, dan tidak akan ada preemption semasa pemprosesan acara. Masa pemprosesan sebenar peristiwa masa biasanya lewat daripada masa ketibaan yang ditetapkan.

Pembelajaran yang disyorkan: Tutorial pembelajaran Redis

Atas ialah kandungan terperinci Mari bercakap tentang acara fail redis dan peristiwa masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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