Rumah > Artikel > pangkalan data > Perbincangan ringkas tentang sebab mengapa Redis lambat dan cara menyelesaikannya
Pembelajaran yang disyorkan: Tutorial video Redis
Idea Penyelesaian Masalah
Jika tika Redis anda menetapkan had ingatan maksimum memori, ia juga boleh menyebabkan Redis menjadi perlahan.
Apabila kami menggunakan Redis sebagai cache tulen, kami biasanya menetapkan memori maksimum had atas memori untuk kejadian ini, dan kemudian menetapkan strategi penghapusan data. Apabila ingatan contoh mencapai maxmemory, anda mungkin mendapati bahawa kelewatan operasi meningkat setiap kali anda menulis data baharu selepas itu.
Sebab kelembapan
Apabila memori Redis mencapai memori maksimum, Redis mesti menendang keluar beberapa data daripada kejadian setiap kali sebelum menulis data baharu contoh di bawah maxmemory sebelum data baharu boleh ditulis.
Logik menendang keluar data lama juga mengambil masa, dan tempoh masa tertentu bergantung pada strategi penghapusan yang anda konfigurasikan:
Strategi mana yang hendak digunakan bergantung pada senario perniagaan tertentu. Secara amnya, yang paling biasa digunakan ialah strategi penghapusan allkeys-lru / volatile-lru Logik pemprosesan mereka adalah untuk mengeluarkan sekumpulan kunci secara rawak dari contoh setiap kali (nombor ini boleh dikonfigurasikan), kemudian menghapuskan kunci yang paling kurang diakses, dan kemudian. gunakan kekunci yang tinggal untuk sementara waktu simpan kekunci dalam kumpulan, teruskan memilih kumpulan kunci secara rawak, bandingkan dengan kunci dalam kumpulan sebelumnya, dan kemudian hapuskan kunci yang paling kurang diakses. Ulangi ini sehingga ingatan contoh jatuh di bawah memori maksimum.
Perlu diingatkan bahawa logik untuk menghapuskan data dalam Redis adalah sama seperti memadam kekunci tamat tempoh Ia juga dilaksanakan sebelum perintah itu benar-benar dilaksanakan dengan kata lain, ia juga akan meningkatkan kelewatan operasi Redis kami Selain itu, menulis OPS Semakin tinggi ia, semakin ketara kelewatannya.
Selain itu, jika bigkey turut disimpan dalam instance Redis anda pada masa ini, ia juga akan mengambil masa yang lama untuk menghapuskan dan memadamkan bigkey untuk melepaskan memori.
Adakah anda melihatnya? Bahaya bigkey ada di mana-mana, sebab tu saya ingatkan awal-awal supaya jangan simpan bigkey sebanyak mungkin.
Penyelesaian
Idea Penyelesaian Masalah
Punca kelembapan
Penyelesaian
Matikan mekanisme halaman yang besar.
Pertama sekali, anda perlu menyemak sama ada mesin Redis mempunyai halaman besar didayakan:
$ cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
Jika pilihan output sentiasa, ini bermakna mekanisme halaman besar didayakan pada masa ini, dan kita perlu mematikannya.
$ echo never > /sys/kernel/mm/transparent_hugepage/enabledTetapi untuk pangkalan data seperti Redis, yang sangat sensitif terhadap prestasi dan kependaman, kami berharap Redis akan mengambil masa yang sesingkat mungkin setiap kali ia digunakan untuk ingatan, jadi saya tidak mengesyorkan anda mendayakan ini mekanisme pada mesin Redis. Punca 3: Gunakan Swap
Jika anda mendapati Redis tiba-tiba menjadi sangat perlahan, setiap operasi mengambil masa sehingga Beratus-ratus milisaat atau walaupun beberapa saat, maka anda perlu menyemak sama ada Redis menggunakan Swap Dalam kes ini, Redis pada dasarnya tidak dapat menyediakan perkhidmatan berprestasi tinggi.
Punca kelembapan
Apakah itu Swap? Mengapakah menggunakan Swap menyebabkan kemerosotan prestasi Redis?
Jika anda mengetahui sesuatu tentang sistem pengendalian, anda akan tahu bahawa untuk mengurangkan kesan memori yang tidak mencukupi pada aplikasi, sistem pengendalian membenarkan sebahagian daripada data dalam memori ditukar kepada cakera untuk menampan penggunaan memori aplikasi , data memori ini ditukar ke kawasan pada cakera, iaitu Swap. Masalahnya ialah apabila data dalam memori dialihkan ke cakera, apabila Redis mengakses data semula, ia perlu membacanya dari cakera Kelajuan mengakses cakera adalah ratusan kali lebih perlahan daripada mengakses memori! Terutama untuk pangkalan data seperti Redis, yang mempunyai keperluan prestasi yang sangat tinggi dan sangat sensitif terhadap prestasi, kelewatan operasi ini tidak boleh diterima. Pada ketika ini, anda perlu menyemak penggunaan memori mesin Redis untuk mengesahkan sama ada Swap digunakan. Anda boleh menyemak sama ada proses Redis menggunakan Swap dengan cara berikut:Hasil output adalah seperti berikut
SAIZ: 1256 KBPenyelesaian Tingkatkan memori mesin supaya Redis mempunyai memori yang mencukupi untuk menggunakan untuk mengatur ruang memori dan melepaskan secukupnya Memori digunakan oleh Redis, dan kemudian Swap of Redis dikeluarkan untuk membenarkan Redis menggunakan semula memoriSWAP: 0 KB
SAIZ: 4 KB
SWAP: 0 KB
SAIZ: 132 KB
SWAP: 0 KB
SAIZ: SAIZ: 63488 kB
Tukar: … 🎜>...
Keputusan ini akan senaraikan penggunaan memori proses Redis.
Setiap baris Saiz mewakili saiz sekeping memori yang digunakan oleh Redis Saiz di bawah mewakili saiz memori dan berapa banyak data yang telah ditukar kepada cakera Jika kedua-dua nilai ini adalah sama, ia bermakna bahawa ini Data dalam memori blok telah ditukar sepenuhnya ke cakera.
Jika hanya sejumlah kecil data ditukar ke cakera, sebagai contoh, setiap Swap menduduki bahagian kecil Saiz yang sepadan, impaknya tidak begitu besar. Jika beratus-ratus megabait atau bahkan GB memori ditukar kepada cakera, maka anda perlu berwaspada Dalam kes ini, prestasi Redis pasti akan menurun secara mendadak.
Proses melepaskan Swap of Redis biasanya memerlukan memulakan semula kejadian kesan memulakan semula contoh pada perniagaan, proses induk-hamba biasanya dilakukan terlebih dahulu, kemudian lepaskan Swap nod induk lama, mulakan semula contoh nod induk lama, tunggu sehingga penyegerakan data pangkalan data hamba selesai, dan kemudian. lakukan suis tuan-hamba.
Jika anda telah mengelakkan senario di atas yang menyebabkan masalah prestasi, dan Redis stabil Ia mempunyai telah berjalan untuk masa yang lama, tetapi selepas beberapa ketika, operasi Redis tiba-tiba mula perlahan, dan ia berterusan. Apakah sebab untuk keadaan ini?
Sebab kelembapan
Apabila lebar jalur rangkaian terlebih beban, pelayan akan mengalami kelewatan penghantaran paket, kehilangan paket, dsb. pada lapisan TCP dan lapisan rangkaian.
Prestasi tinggi Redis, selain memori operasi, terletak pada IO rangkaian Jika terdapat kesesakan dalam rangkaian IO, ia juga akan menjejaskan prestasi Redis dengan serius.
Penyelesaian
Sahkan tepat pada masanya bahawa tika Redis telah mengisi lebar jalur rangkaian Jika ia adalah akses perniagaan biasa, anda perlu mengembangkan atau memindahkannya contoh dalam masa yang perlu dielakkan Oleh kerana trafik contoh ini terlalu besar, ia mempengaruhi kejadian lain mesin ini. Pada peringkat operasi dan penyelenggaraan, anda perlu meningkatkan pemantauan pelbagai penunjuk mesin Redis, termasuk trafik rangkaian Apabila trafik rangkaian mencapai ambang tertentu, penggera terlebih dahulu dan sahkan serta kembangkan kapasiti tepat pada masanya cara.Sebab 5: Sebab lain
2) Pemantauan operasi dan penyelenggaraan
Saya juga menyatakan sebelum ini bahawa jika anda ingin meramalkan kelembapan Redis terlebih dahulu, adalah penting untuk melakukan kerja yang baik dalam pemantauan.
Pemantauan sebenarnya adalah pengumpulan pelbagai penunjuk masa jalan Redis Pendekatan biasa adalah untuk program pemantauan kerap mengumpul maklumat INFO Redis, dan kemudian melakukan paparan data dan penggera berdasarkan data status dalam maklumat INFO.
Apa yang perlu saya ingatkan di sini ialah anda tidak boleh mengambil mudah apabila menulis beberapa skrip pemantauan atau menggunakan komponen pemantauan sumber terbuka.
Apabila menulis skrip pemantauan untuk mengakses Redis, cuba gunakan sambungan panjang untuk mengumpul maklumat status untuk mengelakkan sambungan pendek yang kerap. Pada masa yang sama, anda juga mesti memberi perhatian untuk mengawal kekerapan akses kepada Redis untuk mengelak daripada menjejaskan permintaan perniagaan.
Apabila menggunakan beberapa komponen pemantauan sumber terbuka, yang terbaik adalah memahami prinsip pelaksanaan komponen ini dan mengkonfigurasi komponen ini dengan betul untuk mengelakkan pepijat dalam komponen pemantauan, mengakibatkan sejumlah besar operasi Redis dalam tempoh yang singkat masa dan menjejaskan prestasi Redis berlaku.
Apa yang berlaku kepada kami pada masa itu ialah apabila DBA menggunakan beberapa komponen sumber terbuka, disebabkan oleh isu konfigurasi dan penggunaan, program pemantauan kerap ditubuhkan dan diputuskan sambungan daripada Redis, menyebabkan Redis bertindak balas dengan perlahan.
3) Program lain bersaing untuk mendapatkan sumber
Akhir sekali, saya perlu mengingatkan anda bahawa mesin Redis anda adalah yang terbaik dan hanya digunakan untuk menggunakan kejadian Redis Untuk aplikasi lain, cuba sediakan persekitaran yang agak "tenang" untuk Redis untuk menghalang program lain daripada menduduki CPU, memori dan sumber cakera, menyebabkan sumber tidak mencukupi diperuntukkan kepada Redis.
Pembelajaran yang disyorkan: Tutorial video Redis
Atas ialah kandungan terperinci Perbincangan ringkas tentang sebab mengapa Redis lambat dan cara menyelesaikannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!