Rumah >pangkalan data >Redis >Mari kita bincangkan tentang sebab mengapa Redis lambat dan cara menyelesaikannya.
Artikel ini membawakan anda pengetahuan yang berkaitan tentang Redis Terutamanya ia memperkenalkan isu berkaitan tentang sebab mengapa Redis lambat dan bagaimana untuk menyelesaikan masalah ini bersama-sama kepada semua orang.
Pembelajaran yang disyorkan: Tutorial video Redis
Idea Penyelesaian Masalah
Jika tika Redis anda menetapkan had memori 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 maxmemory, Redis mesti menendang keluar beberapa data daripada contoh sebelum menulis data baharu setiap kali keseluruhan 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
# 先找到 Redis 的进程 ID $ ps -aux | grep redis-server # 查看 Redis Swap 使用情况 $ cat /proc/$pid/smaps | egrep '^(Swap|Size)'
Keputusan ini akan menyenaraikan penggunaan memori proses Redis.
Size: 1256 kB Swap: 0 kB Size: 4 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 63488 kB Swap: 0 kB Size: 132 kB Swap: 0 kB Size: 65404 kB Swap: 0 kB Size: 1921024 kB Swap: 0 kB ...Setiap baris Saiz mewakili saiz sekeping memori yang digunakan oleh Redis Saiz di bawah mewakili saiz memori dan berapa banyak data yang telah ditukar ke 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 sebahagian kecil daripada Saiz yang sepadan, impaknya tidak begitu hebat. 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.
Penyelesaian
Tingkatkan memori mesin supaya Redis mempunyai memori yang mencukupi untuk menggunakan
Dapat dilihat apabila Redis menggunakan Swap, prestasi Redis pada masa ini pada dasarnya tidak dapat memenuhi keperluan prestasi tinggi (anda boleh memahami bahawa seni mempertahankan diri telah dimansuhkan), jadi anda juga perlu mencegah keadaan ini lebih awal.
Cara untuk mengelakkannya ialah anda perlu memantau memori dan penggunaan Swap mesin Redis, penggera apabila memori tidak mencukupi atau Swap digunakan, dan kendalikannya tepat pada masanya.
Idea penyelesaian masalah
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?
Pada ketika ini anda perlu menyemak sama ada lebar jalur rangkaian mesin Redis terlebih beban, dan sama ada terdapat kejadian yang mengisi lebar jalur rangkaian keseluruhan mesin.
Sebab kelembapan
Apabila lebar jalur rangkaian terlebih beban, pelayan akan mengalami kelewatan penghantaran paket, kehilangan paket, dll. pada lapisan TCP dan lapisan rangkaian.
Prestasi tinggi Redis, sebagai tambahan kepada memori operasi, terletak pada IO rangkaian Jika terdapat kesesakan dalam rangkaian IO, ia juga akan menjejaskan prestasi Redis secara serius.
Penyelesaian
1) Sambungan pendek yang kerap
Aplikasi perniagaan anda harus menggunakan sambungan yang panjang untuk mengendalikan Redis untuk mengelakkan Kerap sambungan pendek.
Sambungan pendek yang kerap akan menyebabkan Redis menghabiskan banyak masa untuk mewujudkan dan melepaskan sambungan Jabat tangan tiga hala dan gelombang empat hala TCP juga akan meningkatkan kelewatan akses.
2) Pemantauan operasi dan penyelenggaraan
Seperti yang saya nyatakan sebelum ini, untuk 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 INFO. maklumat.
Apa yang perlu saya ingatkan di sini ialah anda tidak boleh mengambil mudah apabila menulis beberapa skrip pemantauan atau menggunakan komponen pemantauan sumber terbuka.
Semasa 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, menghasilkan sejumlah besar operasi Redis dalam tempoh yang singkat masa dan menjejaskan prestasi Redis berlaku.
Ia berlaku kepada kami pada masa itu bahawa apabila DBA menggunakan beberapa komponen sumber terbuka, disebabkan masalah 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
Perkara terakhir yang perlu saya ingatkan ialah mesin Redis anda adalah yang terbaik dan hanya digunakan untuk menggunakan contoh Redis Do not deploy 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 Mari kita bincangkan tentang sebab mengapa Redis lambat dan cara menyelesaikannya.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!