Jadual Kandungan
Latar Belakang
1. Pengesanan kunci panas
1.1 Pemantauan QPS bagi setiap slot dalam kluster
1.2 Mekanisme proksi digunakan sebagai keseluruhan statistik pintu masuk trafik
1.3 redis mekanisme penemuan kunci hotspot berasaskan LFU
1.4 Pengesanan berdasarkan klien Redis
2. Penyelesaian kunci panas
2.1 Hadkan arus untuk kekunci atau slot tertentu
2.2 Gunakan cache peringkat kedua (tempatan)
2.3 Pembuangan kunci
2.4 Satu lagi idea pusat konfigurasi cache tempatan
2.5 Pelan lain yang boleh dibuat lebih awal
Beberapa penyelesaian bersepadu
Ringkasan
Rumah pangkalan data Redis Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Feb 10, 2022 pm 06:45 PM
redis

Bagaimana untuk menangani masalah kunci panas di Redis? Artikel berikut akan memperkenalkan kepada anda penyelesaian biasa kepada masalah kunci panas cache Redis Saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Apabila melakukan beberapa perniagaan C-side, adalah tidak dapat dielakkan untuk memperkenalkan cache peringkat pertama untuk menggantikan tekanan pada pangkalan data dan mengurangkan masa tindak balas perniagaan. setiap kali perisian tengah diperkenalkan untuk menyelesaikan masalah Pada masa yang sama, ia pasti akan membawa banyak isu baharu yang memerlukan perhatian, seperti bagaimana untuk mencapai konsistensi cache yang disebutkan dalam artikel sebelumnya "Pangkalan Data dan Konsistensi Cache dalam Amalan". Malah, akan ada beberapa masalah lain, seperti kekunci panas, kekunci besar, dsb. yang mungkin disebabkan apabila menggunakan Redis sebagai cache peringkat pertama Dalam artikel ini, kita akan membincangkan masalah 热key(hot key) dan cara yang munasabah menyelesaikan masalah 热key.

Latar Belakang

热keyApakah masalah dan bagaimanakah ia disebabkan?

Secara umumnya, cache Redis yang kami gunakan ialah versi kluster berbilang nod Apabila membaca dan menulis kunci tertentu, slot yang sepadan akan dikira berdasarkan cincangan kekunci, dan ia boleh didapati berdasarkan. pada slot ini. Serpihan yang sepadan (satu set kelompok redis yang terdiri daripada satu induk dan berbilang hamba) digunakan untuk mengakses K-V. Walau bagaimanapun, dalam proses permohonan sebenar, untuk sesetengah perniagaan tertentu atau beberapa tempoh masa tertentu (seperti aktiviti jualan kilat produk dalam perniagaan e-dagang), sejumlah besar permintaan mungkin berlaku untuk mengakses kunci yang sama. Semua permintaan (dan nisbah baca-tulis permintaan sedemikian adalah sangat tinggi) akan jatuh pada pelayan redis yang sama, dan beban pada redis akan meningkat dengan serius Pada masa ini, penambahan contoh redis baharu ke seluruh sistem akan menjadi tidak berguna, kerana mengikut algoritma cincang, Permintaan untuk kunci yang sama masih akan jatuh pada mesin baharu yang sama, yang akan tetap menjadi kesesakan sistem2, malah menyebabkan keseluruhan kluster ranap Jika nilai kunci tempat liputan ini agak besar, ia juga akan menyebabkan kad rangkaian mencapai kesesakan Masalah ini Dikenali sebagai masalah "kunci panas". [Cadangan berkaitan: Tutorial video Redis]

Seperti yang ditunjukkan dalam Rajah 1 dan 2 di bawah, mereka ialah kluster redis biasa dan akses kunci kluster redis menggunakan lapisan proksi proksi masing-masing.

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Seperti yang dinyatakan di atas, kekunci panas akan membawa tekanan beban yang sangat tinggi kepada sebilangan kecil nod dalam kelompok jika tidak dikendalikan dengan betul , maka nod ini mungkin turun, yang akan menjejaskan operasi keseluruhan kluster cache Oleh itu, kita mesti menemui kunci panas dan menyelesaikan masalah kunci panas dalam masa.

1. Pengesanan kunci panas

Pengesanan kunci panas, melihat beberapa kesan ketara yang disebabkan oleh penyebaran gugusan redis dan kunci panas, kami boleh melakukannya melalui proses pemikiran yang kasar dan halus. untuk pengesanan kunci tempat liputan.

1.1 Pemantauan QPS bagi setiap slot dalam kluster

Kesan paling ketara hot key ialah pengagihan trafik di bawah premis bahawa qps dalam keseluruhan kluster redis adalah tidak begitu besar Apabila ia datang kepada masalah slot tidak sekata dalam kelompok, perkara pertama yang boleh kita fikirkan adalah untuk memantau trafik dalam setiap slot Selepas melaporkan, bandingkan trafik setiap slot, dan kemudian kita boleh mencari slot tertentu terjejas apabila kekunci panas muncul. Walaupun pemantauan ini adalah yang paling mudah, butirannya terlalu kasar Ia hanya sesuai untuk penyelesaian pemantauan kelompok awal dan tidak sesuai untuk senario di mana kekunci panas dikesan dengan tepat.

1.2 Mekanisme proksi digunakan sebagai keseluruhan statistik pintu masuk trafik

Jika kita menggunakan mod proksi kelompok redis dalam Rajah 2, kerana semua permintaan akan pergi ke proksi terlebih dahulu Pergi ke nod slot tertentu, kemudian statistik pengesanan kunci panas ini boleh dilakukan dalam proksi Berdasarkan 时间滑动窗口 dalam proksi, setiap kunci dikira, dan kemudian kunci yang melebihi ambang yang sepadan dikira. Untuk mengelakkan terlalu banyak statistik berlebihan, anda juga boleh menetapkan beberapa peraturan untuk mengira kunci yang sepadan dengan awalan dan jenis sahaja. Kaedah ini memerlukan sekurang-kurangnya mekanisme proksi dan mempunyai keperluan untuk seni bina redis.

1.3 redis mekanisme penemuan kunci hotspot berasaskan LFU

Versi di atas redis 4.0 menyokong mekanisme penemuan kunci hotspot berasaskan LFU pada setiap nod, gunakan redis-cli –hotkeysItu sahaja , tambah pilihan –hotkeys apabila melaksanakan redis-cli. Anda boleh menggunakan arahan ini dengan kerap pada nod untuk menemui kunci hotspot yang sepadan.

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Seperti yang ditunjukkan di bawah, anda boleh melihat hasil pelaksanaan redis-cli –hotkeys dan maklumat statistik kekunci panas Masa pelaksanaan perintah ini adalah panjang, dan anda boleh menetapkan sehingga pelaksanaan berjadual untuk statistik.

1.4 Pengesanan berdasarkan klien Redis

Memandangkan arahan redis dikeluarkan daripada klien setiap kali, berdasarkan ini kami boleh melakukan statistik dan mengira dalam beberapa kod klien redis. Setiap pelanggan membuat statistik berdasarkan tetingkap gelongsor masa Selepas melebihi ambang tertentu, statistik dilaporkan kepada pelayan, dan kemudian pelayan menghantarnya kepada setiap pelanggan secara seragam, dan mengkonfigurasi masa tamat tempoh yang sepadan.

Kaedah ini kelihatan lebih 优美, tetapi sebenarnya ia tidak begitu sesuai dalam sesetengah senario aplikasi, kerana pengubahsuaian pada bahagian klien akan membawa overhed memori yang lebih besar kepada proses berjalan, yang akan menjadikannya lebih sukar Secara langsung, bahasa dengan pengurusan memori automatik seperti Java dan goLang akan mencipta objek dengan lebih kerap, mencetuskan gc dan menyebabkan masa tindak balas antara muka meningkat.

Akhir sekali, anda boleh membuat pilihan yang sepadan melalui infrastruktur setiap syarikat.

2. Penyelesaian kunci panas

Melalui kaedah di atas kami telah mengesan kunci panas atau slot panas yang sepadan, maka kami perlu menyelesaikan masalah kunci panas yang sepadan. Terdapat beberapa idea untuk menyelesaikan kekunci panas. Mari kita baca satu persatu.

2.1 Hadkan arus untuk kekunci atau slot tertentu

Cara paling mudah dan paling kasar ialah mengehadkan arus untuk slot atau kekunci panas tertentu Penyelesaian ini jelas sesuai untuk Ia kerugian untuk perniagaan, jadi disyorkan untuk hanya menggunakan pengehad semasa tertentu apabila terdapat masalah dalam talian dan kerugian itu perlu dihentikan.

2.2 Gunakan cache peringkat kedua (tempatan)

Cache setempat juga merupakan penyelesaian yang paling biasa digunakan Memandangkan cache peringkat pertama kami tidak dapat menahan tekanan yang begitu besar , Hanya tambah cache tahap kedua. Memandangkan setiap permintaan dikeluarkan oleh perkhidmatan, adalah sesuai untuk menambah cache peringkat kedua ini ke bahagian perkhidmatan Oleh itu, setiap kali pelayan memperoleh kunci panas yang sepadan, ia boleh menggunakan cache tempatan untuk menyimpan salinan sehingga cache setempat tamat tempoh. Kemudian minta sekali lagi untuk mengurangkan tekanan pada kelompok redis. Mengambil java sebagai contoh, guavaCache ialah alat siap sedia. Contoh berikut:

    //本地缓存初始化以及构造
    private static LoadingCache<String, List<Object>> configCache
            = CacheBuilder.newBuilder()
            .concurrencyLevel(8)  //并发读写的级别,建议设置cpu核数
            .expireAfterWrite(10, TimeUnit.SECONDS)  //写入数据后多久过期
            .initialCapacity(10) //初始化cache的容器大小
            .maximumSize(10)//cache的容器最大
            .recordStats()
            // build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
            .build(new CacheLoader<String, List<Object>>() {
                @Override
                public List<Object> load(String hotKey) throws Exception {
                    
                }
            });
    
    //本地缓存获取
    Object result = configCache.get(key);
Salin selepas log masuk

Kesan terbesar cache tempatan kepada kami ialah masalah ketidakkonsistenan data Berapa lama kami menetapkan masa tamat tempoh cache akan membawa kepada masalah ketidakkonsistenan data dalam talian yang paling lama perlu mengukur tekanan kelompoknya sendiri dan masa ketidakkonsistenan maksimum yang diterima oleh perniagaan.

2.3 Pembuangan kunci

Bagaimana untuk memastikan masalah kunci panas tidak akan berlaku sambil memastikan konsistensi data sebanyak mungkin? Mengeluarkan kunci juga merupakan penyelesaian yang baik.

Apabila kami memasukkannya ke dalam cache, kami membahagikan kunci cache perniagaan yang sepadan kepada berbilang kunci yang berbeza. Seperti yang ditunjukkan dalam rajah di bawah, kami mula-mula membahagikan kunci kepada N bahagian di sisi cache kemas kini Contohnya, jika kunci dinamakan "good_100", maka kita boleh membahagikannya kepada empat bahagian, "good_100_copy1", "good_100_copy2. "," good_100_copy3", "good_100_copy4", kekunci N ini perlu ditukar setiap kali ia dikemas kini atau ditambah. Langkah ini adalah untuk mengalih keluar kunci.

Untuk bahagian perkhidmatan, kita perlu mencari cara untuk menjadikan trafik yang kita akses sama rata, dan cara menambah imbuhan pada kekunci panas yang akan kita akses. Terdapat beberapa cara untuk melakukan cincang berdasarkan alamat IP atau mac mesin, dan kemudian ambil baki nilai dan bilangan kekunci split, dan akhirnya tentukan jenis akhiran kunci yang disambungkan, supaya mesin mana ia akan dipukul apabila perkhidmatan bermula Nombor rawak ialah baki bilangan kekunci belah.

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

2.4 Satu lagi idea pusat konfigurasi cache tempatan

Bagi mereka yang biasa dengan pusat konfigurasi perkhidmatan mikro, kami idea boleh ditukar kepada ketekalan pusat konfigurasi. Ambil nacos sebagai contoh Bagaimana ia mencapai ketekalan konfigurasi yang diedarkan dan bertindak balas dengan cepat? Kemudian kita boleh membandingkan analogi cache dengan konfigurasi dan melakukannya seperti ini.

长轮询 本地化 konfigurasi. Mula-mula, semua konfigurasi akan dimulakan apabila perkhidmatan bermula, dan kemudian pengundian panjang akan dimulakan dengan kerap untuk memeriksa sama ada konfigurasi pemantauan perkhidmatan semasa telah berubah Jika terdapat perubahan, permintaan tinjauan panjang akan kembali serta-merta untuk mengemas kini konfigurasi setempat; jika tiada perubahan, untuk Semua kod perniagaan menggunakan konfigurasi cache memori tempatan. Ini memastikan ketepatan masa dan ketekalan konfigurasi cache yang diedarkan.

2.5 Pelan lain yang boleh dibuat lebih awal

Setiap penyelesaian di atas adalah agak bebas untuk menyelesaikan masalah utama, jadi jika kita benar-benar menghadapi permintaan perniagaan, kita sebenarnya akan Terdapat masa yang lama untuk mempertimbangkan reka bentuk skema keseluruhan. Untuk isu utama hangat yang disebabkan oleh beberapa senario jualan kilat yang melampau, jika kami mempunyai belanjawan yang mencukupi, kami boleh mengasingkan perniagaan perkhidmatan secara langsung dan kluster cache redis untuk mengelakkan menjejaskan perniagaan biasa, dan pada masa yang sama, kami boleh menggunakan pemulihan bencana yang lebih baik buat sementara waktu dan Langkah mengehadkan semasa.

Beberapa penyelesaian bersepadu

Pada masa ini terdapat banyak penyelesaian peringkat aplikasi yang agak lengkap untuk hotKey di pasaran, antaranya JD.com mempunyai alat hotkey sumber terbuka dalam hal ini , prinsipnya adalah untuk membuat cerapan pada bahagian klien, dan kemudian melaporkan hotkey yang sepadan Selepas bahagian pelayan mengesannya, ia akan menghantar hotkey yang sepadan kepada pelayan yang sepadan untuk caching tempatan, dan cache tempatan ini akan dikemas kini secara serentak selepas. kunci sepadan jauh sudah dikemas kini. Ia kini merupakan penyelesaian 自动探测热key、分布式一致性缓存 yang agak matang, kunci panas runcit JD.com .

Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa

Ringkasan

Di atas adalah beberapa penyelesaian yang penulis fahami atau amalkan secara kasar tentang cara menangani hot key, bermula daripada penemuan kunci panas Untuk menyelesaikan dua masalah utama kunci panas. Setiap penyelesaian mempunyai kelebihan dan kekurangan, seperti ketidakkonsistenan perniagaan, kesukaran dalam pelaksanaan, dll. Anda boleh membuat pelarasan dan perubahan yang sepadan berdasarkan ciri semasa perniagaan anda sendiri dan infrastruktur syarikat semasa.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menangani masalah kunci panas cache dalam Redis? Perkongsian penyelesaian biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Cara melaksanakan redis yang mendasari Cara melaksanakan redis yang mendasari Apr 10, 2025 pm 07:21 PM

Redis menggunakan jadual hash untuk menyimpan data dan menyokong struktur data seperti rentetan, senarai, jadual hash, koleksi dan koleksi yang diperintahkan. Redis berterusan data melalui snapshots (RDB) dan menambah mekanisme tulis sahaja (AOF). Redis menggunakan replikasi master-hamba untuk meningkatkan ketersediaan data. Redis menggunakan gelung acara tunggal untuk mengendalikan sambungan dan arahan untuk memastikan atom dan konsistensi data. Redis menetapkan masa tamat tempoh untuk kunci dan menggunakan mekanisme memadam malas untuk memadamkan kunci tamat tempoh.

Cara Melihat Semua Kekunci di Redis Cara Melihat Semua Kekunci di Redis Apr 10, 2025 pm 07:15 PM

Untuk melihat semua kunci di Redis, terdapat tiga cara: Gunakan perintah kunci untuk mengembalikan semua kunci yang sepadan dengan corak yang ditentukan; Gunakan perintah imbasan untuk melangkah ke atas kunci dan kembalikan satu set kunci; Gunakan arahan maklumat untuk mendapatkan jumlah kunci.

Cara melihat nombor versi Redis Cara melihat nombor versi Redis Apr 10, 2025 pm 05:57 PM

Untuk melihat nombor versi REDIS, anda boleh menggunakan tiga kaedah berikut: (1) Masukkan arahan INFO, (2) Mulakan pelayan dengan pilihan --version, dan (3) Lihat fail konfigurasi.

Apa yang perlu dilakukan sekiranya pelayan redis tidak dapat dijumpai Apa yang perlu dilakukan sekiranya pelayan redis tidak dapat dijumpai Apr 10, 2025 pm 06:54 PM

Langkah-langkah untuk menyelesaikan masalah yang tidak dapat dijumpai oleh Redis-Server: periksa pemasangan untuk memastikan Redis dipasang dengan betul; Tetapkan pembolehubah persekitaran redis_host dan redis_port; Mulakan Redis Server Redis-server; Semak sama ada pelayan sedang menjalankan ping redis-cli.

Cara menggunakan perintah redis Cara menggunakan perintah redis Apr 10, 2025 pm 08:45 PM

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Cara menggunakan redis zset Cara menggunakan redis zset Apr 10, 2025 pm 07:27 PM

Redis memerintahkan set (ZSET) digunakan untuk menyimpan elemen yang diperintahkan dan disusun mengikut skor yang berkaitan. Langkah -langkah untuk menggunakan ZSET termasuk: 1. Buat zset; 2. Tambah ahli; 3. Dapatkan skor ahli; 4. Dapatkan kedudukan; 5. Dapatkan ahli dalam julat ranking; 6. Padam ahli; 7. Dapatkan bilangan elemen; 8. Dapatkan bilangan ahli dalam julat skor.

Cara membaca kod sumber redis Cara membaca kod sumber redis Apr 10, 2025 pm 08:27 PM

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

See all articles