


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
Punca 1: Memori instance mencapai had atas
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:
- allkeys-lru: tanpa mengira kunci Sama ada tamat tempoh tetapkan, hapuskan kunci yang paling kurang diakses baru-baru ini
- volatile-lru: hanya hapuskan kunci yang paling kurang diakses baru-baru ini dengan set masa tamat
- allkeys-random: tanpa mengira sama ada kunci ditetapkan untuk tamat tempoh , hapuskan kekunci secara rawak
- rawak meruap: hanya hapuskan kunci secara rawak dengan masa tamat tempoh ditetapkan
- allkeys-ttl: hapuskan kunci yang hampir tamat tempoh tidak kira sama ada kunci ditetapkan untuk tamat tempoh
- noeviction: Tiada kunci akan dihapuskan Selepas ingatan contoh mencapai maksimum, ralat akan dikembalikan secara langsung apabila data baharu ditulis
- allkeys-lfu: Tidak kira sama ada kunci ditetapkan untuk tamat tempoh. kunci dengan kekerapan akses terendah akan dihapuskan (disokong dalam versi 4.0)
- volatile-lfu: Hanya hapuskan kekerapan akses terendah dan tetapkan kunci masa tamat tempoh (disokong oleh versi 4.0)
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
- Elakkan menyimpan bigkey dan kurangkan masa melepaskan ingatan
- Strategi penyingkiran ditukar kepada penyingkiran rawak, yang lebih baik daripada LRU Ia lebih pantas (dilaraskan berdasarkan keadaan perniagaan)
- Pisah kejadian dan edarkan tekanan penyingkiran kunci kepada berbilang kejadian
- Jika anda menggunakan Redis 4.0 atau lebih tinggi, dayakan layz -mekanisme bebas , letakkan operasi menghapuskan kunci dan melepaskan memori ke dalam benang latar belakang (konfigurasikan lazyfree-lazy-eviction = ya)
Punca 2: Hidupkan halaman memori yang besar
Idea Penyelesaian Masalah
- Kita semua tahu bahawa apabila aplikasi memohon memori daripada sistem pengendalian, ia digunakan untuknya mengikut halaman memori dan saiz halaman memori konvensional ialah 4KB.
- Bermula dari 2.6.38, kernel Linux menyokong mekanisme halaman besar memori, yang membolehkan aplikasi memohon memori daripada sistem pengendalian dalam unit 2MB.
- Unit memori yang digunakan oleh aplikasi pada sistem pengendalian setiap kali menjadi lebih besar, tetapi ini juga bermakna masa yang diperlukan untuk memohon memori menjadi lebih lama.
Punca kelembapan
- Apabila Redis melaksanakan RDB latar belakang dan penulisan semula AOF, ia menggunakan proses anak fork untuk mengendalikannya. Walau bagaimanapun, selepas proses utama menghentikan proses kanak-kanak, proses utama pada masa ini masih boleh menerima permintaan tulis, dan permintaan tulis masuk akan menggunakan kaedah Salin Pada Tulis (salin atas tulis) untuk mengendalikan data memori.
- Dalam erti kata lain, apabila proses utama mempunyai data yang perlu diubah suai, Redis tidak akan mengubah suai secara langsung data dalam memori sedia ada, sebaliknya ia akan menyalin data memori dahulu dan kemudian mengubah suai data masuk memori baharu , ini dipanggil "salin-pada-tulis".
- Copy-on-write juga boleh difahami sebagai, sesiapa yang perlu menulis perlu menyalin dahulu dan kemudian mengubah suai.
- Kelebihan ini ialah sebarang operasi tulis oleh proses induk tidak akan menjejaskan kegigihan data proses anak (proses anak hanya mengekalkan semua data dalam keseluruhan kejadian pada saat fork, dan tidak tidak peduli perubahan data baru, kerana proses kanak-kanak hanya memerlukan snapshot memori, yang kemudiannya diteruskan ke cakera).
- Tetapi sila ambil perhatian bahawa apabila proses utama menyalin data memori, peringkat ini melibatkan penggunaan memori baharu Jika sistem pengendalian menghidupkan halaman memori yang besar pada masa ini, maka dalam tempoh ini, walaupun jika pelanggan Jika hanya 10B data diubah suai, Redis juga akan digunakan pada sistem pengendalian dalam unit 2MB apabila memohon memori Masa yang diambil untuk memohon memori akan menjadi lebih lama, yang akan meningkatkan kelewatan setiap permintaan tulis dan menjejaskan Prestasi Redis.
- Begitu juga, jika permintaan tulis ini beroperasi pada kunci besar, maka apabila proses utama menyalin blok memori kunci besar, memori yang diminta pada satu-satu masa akan menjadi lebih besar dan masa akan menjadi lebih lama. Ia boleh dilihat bahawa bigkey menjejaskan prestasi di sini sekali lagi.
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
Idea Penyelesaian Masalah
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
- untuk mengatur ruang memori dan melepaskan secukupnya Memori digunakan oleh Redis, dan kemudian Swap of Redis dikeluarkan, membenarkan Redis menggunakan semula memori
- Proses melepaskan Swap of Redis biasanya memerlukan memulakan semula contoh 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.
- 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.
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.
Punca 4: kelebihan lebar jalur rangkaian
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
Sebab 5: Sebab lain
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!

Redis adalah sistem penyimpanan struktur data memori, terutamanya digunakan sebagai pangkalan data, cache dan broker mesej. Ciri-ciri terasnya termasuk model tunggal, multiplexing I/O, mekanisme ketekunan, replikasi dan fungsi clustering. Redis biasanya digunakan dalam aplikasi praktikal untuk caching, penyimpanan sesi, dan beratur mesej. Ia dapat meningkatkan prestasinya dengan memilih struktur data yang betul, menggunakan saluran paip dan urus niaga, dan pemantauan dan penalaan.

Perbezaan utama antara pangkalan data REDIS dan SQL ialah REDIS adalah pangkalan data dalam memori, sesuai untuk keperluan prestasi tinggi dan fleksibiliti; Pangkalan data SQL adalah pangkalan data relasi, sesuai untuk pertanyaan kompleks dan keperluan konsistensi data. Khususnya, 1) REDIS menyediakan akses data berkelajuan tinggi dan perkhidmatan caching, menyokong pelbagai jenis data, sesuai untuk pemprosesan data caching dan masa nyata; 2) Pangkalan data SQL menguruskan data melalui struktur jadual, menyokong pertanyaan kompleks dan pemprosesan transaksi, dan sesuai untuk senario seperti sistem e-dagang dan kewangan yang memerlukan konsistensi data.

Redisactsasbothadatastoreandaservice.1) asadatastore, itusesin-memorystorageforfastoperations, supportingvariousdataStructuresLikey-valueepairsandsortedsets.2) asaservice, itprovidesfunctionalitiesticePub/subdressageSpleSclePing

Berbanding dengan pangkalan data lain, REDIS mempunyai kelebihan unik berikut: 1) kelajuan yang sangat cepat, dan membaca dan menulis operasi biasanya pada tahap microsecond; 2) menyokong struktur dan operasi data yang kaya; 3) Senario penggunaan fleksibel seperti cache, kaunter dan menerbitkan langganan. Apabila memilih REDI atau pangkalan data lain, ia bergantung kepada keperluan dan senario khusus. Redis berfungsi dengan baik dalam aplikasi berprestasi tinggi dan rendah latency.

Redis memainkan peranan penting dalam penyimpanan dan pengurusan data, dan telah menjadi teras aplikasi moden melalui pelbagai struktur data dan mekanisme kegigihannya. 1) REDIS menyokong struktur data seperti rentetan, senarai, koleksi, koleksi yang diperintahkan dan jadual hash, dan sesuai untuk logik perniagaan cache dan kompleks. 2) Melalui dua kaedah ketekunan, RDB dan AOF, Redis memastikan penyimpanan yang boleh dipercayai dan pemulihan data yang cepat.

Redis adalah pangkalan data NoSQL yang sesuai untuk penyimpanan dan akses data berskala besar. 1.Redis adalah sistem penyimpanan struktur data memori sumber terbuka yang menyokong pelbagai struktur data. 2. Ia menyediakan kelajuan membaca dan menulis yang sangat cepat, sesuai untuk caching, pengurusan sesi, dan lain -lain. 3.DIS menyokong kegigihan dan memastikan keselamatan data melalui RDB dan AOF. 4. Contoh penggunaan termasuk operasi pasangan nilai utama dan fungsi deduplikasi koleksi lanjutan. 5. Kesilapan umum termasuk masalah sambungan, jenis data yang tidak sepadan dan limpahan memori, jadi anda perlu memberi perhatian kepada debugging. 6. Cadangan Pengoptimuman Prestasi termasuk memilih struktur data yang sesuai dan menubuhkan strategi penghapusan memori.

Aplikasi REDIS di dunia nyata termasuk: 1. Kepelbagaian Redis dan prestasi tinggi menjadikannya bersinar dalam senario ini.

Redis menonjol kerana kelajuan tinggi, fleksibiliti dan struktur data yang kaya. 1) Redis menyokong struktur data seperti rentetan, senarai, koleksi, hash dan koleksi yang diperintahkan. 2) Ia menyimpan data melalui ingatan dan menyokong RDB dan AOF kegigihan. 3) Bermula dari Redis 6.0, operasi I/O multi-threaded telah diperkenalkan, yang telah meningkatkan prestasi dalam senario konvensional yang tinggi.


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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft
