Jadual Kandungan
Mekanisme penimbal Redis
Mekanisme penimbalan pelanggan
Mengatasi penimbal input limpahan
Lihat maklumat penimbal input
Cara menyelesaikan limpahan penimbal input
主从集群中的缓冲区
复制缓冲区
复制缓冲区溢出
复制积压缓冲区
Untuk menyelesaikan limpahan penimbal tunggakan replikasi
Rumah pangkalan data Redis Contoh analisis mekanisme penimbal Redis

Contoh analisis mekanisme penimbal Redis

May 31, 2023 am 08:40 AM
redis

Mekanisme penimbal Redis

Mekanisme penimbal dalam Redis adalah untuk mengimbangi perbezaan kelajuan antara arahan penghantaran pelanggan dan arahan pemprosesan pelayan Jika pelanggan menulis terlalu cepat atau pelayan membaca terlalu perlahan, ini akan berlaku Ia akan membawa kepada limpahan penimbal Setelah penimbal melimpah, ia akan menyebabkan beberapa masalah prestasi Mari kita bincangkan secara terperinci di bawah.

Mekanisme penimbalan pelanggan

Redis memperuntukkan penimbal input dan penimbal output untuk setiap pelanggan Penampan input akan menyimpan sementara arahan permintaan pelanggan, dan utas utama Redis Perintah itu akan diperolehi daripada penimbal. Selepas Redis memproses arahan, hasilnya akan ditulis ke penimbal output dan dikembalikan kepada klien melalui penimbal output, seperti yang ditunjukkan di bawah

Contoh analisis mekanisme penimbal Redis

Mengatasi penimbal input limpahan

Limpahan penimbal input biasanya berlaku dalam dua situasi

  • Data ditulis terlalu cepat, atau data yang ditulis kepada bigkey mengisi daerah penimbal data.

  • Pelayan memproses data terlalu perlahan Secara amnya, urutan utama disekat dan tidak boleh bertindak balas kepada permintaan pelanggan seperti biasa.

Lihat maklumat penimbal input

Kita boleh menggunakan client list untuk melihat maklumat khusus penimbal input

127.0.0.1:6379> client list
id=13 addr=127.0.0.1:50484 fd=7 name= age=1136 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client user=default
id=14 addr=127.0.0.1:50486 fd=8 name= age=1114 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client user=default
Salin selepas log masuk

Setiap kali pelanggan berada disambungkan, Akan ada satu lagi maklumat penimbal input Perintah di atas adalah hasil sambungan setempat saya kepada dua pelanggan Apabila kami melihat penimbal, kami memfokuskan pada dua parameter yang berkaitan dengan memori

  • .

    qbuf: penimbal telah digunakan Panjangnya (dalam bait, 0 bermakna tiada penimbal diperuntukkan).

  • qbuf-free: Baki ruang kosong dalam penimbal (dalam bait), qbuf=26 klien di atas, penimbal percuma qbuf-free=32742, kemudian jumlah yang diperuntukkan saiz memori Ia ialah 26+32742=32768 bait, iaitu 32KB.

Jika qbuf-free dalam maklumat penimbal input sangat kecil dan qbuf sangat besar, anda perlu memberi perhatian pada masa ini, penimbal input mungkin hampir melimpah masih Sebilangan besar permintaan ditulis kepada penimbal input Penyelesaian Redis adalah untuk menutup sambungan dengan pelanggan ini, jadi data perniagaan tidak akan dapat diakses secara normal.

Masalah lain ialah penimbal input wujud untuk setiap pelanggan Apabila jumlah memori penimbal input semua pelanggan melebihi konfigurasi memori maksimum, penghapusan memori akan berlaku dan beberapa data yang dihapuskan akan diakses semula perlu diperolehi daripada pangkalan data latar belakang, dan masa pemerolehan pastinya jauh lebih perlahan daripada bacaan langsung daripada Redis, jadi ini juga merupakan sebab kelewatan dalam Redis.

Cara menyelesaikan limpahan penimbal input

Intipati limpahan penimbal input ialah kapasiti penimbal tidak mencukupi, jadi idea pertama adalah untuk mengembangkan saiz penimbal input. Redis tidak memberikannya kepada kami Ubah suai konfigurasi saiz penimbal input Redis memerlukan penimbal input setiap pelanggan tidak boleh melebihi 1G. ! ! , sambungan pelanggan akan ditutup jika penimbal input pelanggan melebihi 1G, jadi ini tidak akan berfungsi.

Kemudian anda hanya boleh menghantar saiz data daripada klien dan kelajuan pemprosesan arahan oleh pelayan , pemprosesan arahan pada pelayan Kelajuan biasanya bergantung pada sama ada utas utama disekat Anda perlu cuba mengelakkan beberapa operasi menyekat seperti penulisan semula fail AOF, pemadaman nilai kunci, utas garpu, dll.

Mengatasi limpahan penimbal keluaran

Untuk pelayan, maklumat input klien biasanya tidak dapat diramalkan, tetapi maklumat output kebanyakannya boleh diramal Contohnya, arahan Set mengembalikan OK yang mudah. contoh lain ialah beberapa mesej ralat. Redis memperuntukkan 16KB ruang penimbal tetap untuk mesej pulangan berterusan ini, dengan kata lain, penimbal keluaran dibahagikan kepada dua bahagian ialah mesej pulangan berubah.

Limpahan penimbal keluaran dibahagikan kepada tiga situasi

  • Nilai kunci keluaran dengan kapasiti besar seperti kunci besar.

  • Pelanggan melaksanakan arahan Monitor untuk memantau pelaksanaan Redis.

  • Tetapan penimbal adalah tidak munasabah.

Bigkey ialah masalah biasa Apabila pelayan mengeluarkan arahan seperti bigkey atau kekunci, ujian pada penimbal output adalah sangat hebat, kerana pertanyaan akan menduduki input seketika. . Menampan sejumlah besar ruang memori.

Pantau pelaksanaan perintah

Arahan monitor pada umumnya ialah arahan nyahpepijat, digunakan untuk memantau pelaksanaan khusus Redis dan boleh mengembalikan setiap arahan yang diproses oleh pelayan.

127.0.0.1:6379> monitor
OK
1652184977.609761 [0 127.0.0.1:50484] "get" "name"
1652185391.529292 [0 127.0.0.1:50484] "set" "test" "lisi"
......
Salin selepas log masuk

Menjalankan monitor akan sentiasa menempati penimbal output Maksudnya, semakin lama ia menduduki, semakin mudah untuk menyebabkan penimbal output melimpah Oleh itu, arahan Monitor hanya sesuai untuk nyahpepijat persekitaran dan tidak boleh dilaksanakan dalam pesanan.

Tetapan penimbal output adalah tidak munasabah

Saiz penimbal input tidak boleh ditetapkan, tetapi penimbal output boleh ditetapkan melalui item konfigurasi

kandungan ialah Saiz memori bagi dua bahagian client-output-buffer-limit

  • penimbal Apabila saiz konfigurasi penimbal melebihi, pelayan akan menutup sambungan dengan klien.

  • 持续写入的时间限制和持续写入的容量限制,当超过持续写入时间限制和容量限制,服务端也会强制关闭和客户端的连接。

客户端种类

在聊缓冲区配置时,我们需要先了解下客户端的种类,本文中强调的客户端并不是单纯指通过命令./redis-cli -c -h 127.0.0.1 -p 6379去连接Redis服务器这类客户端称为常规客户端,我们还有通过消息订阅Redis频道的客户端,还有一种最为特殊的主从同步,从节点也是一个特殊的客户端称为从节点客户端。

配置项client-output-buffer-limit也是针对这三种,给出了不一样的配置,如下所示

## 普通客户端配置
client-output-buffer-limit normal 0 0 0
## 从节点客户端配置
client-output-buffer-limit replica 256mb 64mb 60
## 消息订阅频道的客户端
client-output-buffer-limit pubsub 32mb 8mb 60

######################配置解释######################
## 第一个参数:代表分配给客户端的缓存大小,为0代表没有限制
## 第二个参数:表示持续写入的最大内存,为0代表没有限制
## 第三个参数:表示持续写入的最长时间,为0代表没有限制
Salin selepas log masuk

普通客户端设置

普通客户端就是传输的一些普通的指令,一个指令发送完需要等待其返回后才会发送下一个指令,也就是说只要不是返回的bigkey数据,占用输出缓冲区的内存就极少,能够立即发送给客户端响应,所以一般正常客户端默认配置都是0,也就是不限制。

消息订阅频道客户端

当订阅频道产生消息后,会将消息通过输出缓冲区发送给客户端,这种属于非阻塞的方式,一瞬间可能有多个指令到达,所以需要指定缓冲区大小。

如何解决输出缓冲区溢出

到这里其实我们已经能够得到输出缓冲区溢出的解决方案了

  • bigkey应当避免使用。

  • Monitor命令只在调试的时候使用,不能应用到生产。

  • 合理设置输出缓冲区上限、持续写入时间上限以及持续写入内存容量上限。

主从集群中的缓冲区

除了输入缓冲区和输出缓冲区外在主从集群场景下还存在两种缓冲区,我们称为复制缓冲区和复制积压缓冲区,这两个缓冲区的溢出和输入输出缓冲区稍有不同。

复制缓冲区

复制缓冲区这个名词看着很陌生,但是我们之前在聊主从同步时讲过,主从全量同步期间从节点会加载主节点的RDB文件,这时主节点同样还能写入数据,但是从节点在加载RDB文件没办法实时同步,所以Redis就为每一个从节点开辟了一片空间,用来存放主从全量同步期间产生的操作命令,这就是replication buffer,也就是复制缓冲区。

Contoh analisis mekanisme penimbal Redis

复制缓冲区溢出

复制缓冲区什么时候会溢出呢?

  • 当从节点在加载RDB文件这个过程中如果存在大量的写操作就会造成复制缓冲区内存溢出。

  • 从节点加载RDB文件的时间过长。

发生溢出后,主节点会关闭与从节点的连接,导致全量同步失败。

解决复制缓冲区溢出

控制主节点实例的大小,减小生成的RDB文件,这样就能减少从节点加载RDB文件的时间,减小复制缓冲区的压力。

从节点其本质就是主节点的特殊客户端,所以使用的是输出缓冲区(也就是指replication buffer),可以设置client-output-buffer-limit replica 256mb 64mb 60扩大缓冲区大小。

注意:主节点上的复制缓冲区会为每一个从节点分配一个,那么从节点的数量过多即使每个从节点没有达到maxmemory,但累加的结果也会给主节点带来内存压力

复制积压缓冲区

复制积压缓冲区溢出

主从集群在写操作时会将操作写入复制缓冲区和复制积压缓冲区中,一旦网络发送故障后恢复连接,在2.8版本之前主从节点会进行全量同步开销非常大,所以2.8版本后还是采用了增量同步,仅仅将网络断开这段时间的操作同步给从节点,所以在网络恢复连接后从节点会将自己的复制偏移量slave_repl_offset发送给主节点,主节点将自身的写入偏移量master_repl_offset和slave_repl_offset在复制积压缓冲区中做对比得到网络断连期间的操作。

复制积压缓冲区又叫repl_backlog_buffer,是一个环形缓冲区,同步示意图如下。

Contoh analisis mekanisme penimbal Redis

复制积压缓冲区溢出其实也就是因为复制积压缓冲区是一个有限环形结构,一般主节点写入偏移量要大于从节点的读取偏移量,但如果写入偏移量覆盖了从节点的读取偏移量这就引发了复制积压缓冲区溢出。

Untuk menyelesaikan limpahan penimbal tunggakan replikasi

Secara amnya, laraskan saiz parameter repl_backlog_size, kembangkan saiz penimbal tunggakan replikasi dan kurangkan pengimbangan tulis nod induk untuk menampung ofset baca bagi nod hamba.

Atas ialah kandungan terperinci Contoh analisis mekanisme penimbal Redis. 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

Video Face Swap

Video Face Swap

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

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 membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

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 kunci redis Cara menggunakan kunci redis Apr 10, 2025 pm 08:39 PM

Menggunakan REDIS untuk mengunci operasi memerlukan mendapatkan kunci melalui arahan SETNX, dan kemudian menggunakan perintah luput untuk menetapkan masa tamat tempoh. Langkah-langkah khusus adalah: (1) Gunakan arahan SETNX untuk cuba menetapkan pasangan nilai utama; (2) Gunakan perintah luput untuk menetapkan masa tamat tempoh untuk kunci; (3) Gunakan perintah DEL untuk memadam kunci apabila kunci tidak lagi diperlukan.

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.

Cara menggunakan baris arahan redis Cara menggunakan baris arahan redis Apr 10, 2025 pm 10:18 PM

Gunakan alat baris perintah redis (redis-cli) untuk mengurus dan mengendalikan redis melalui langkah-langkah berikut: Sambungkan ke pelayan, tentukan alamat dan port. Hantar arahan ke pelayan menggunakan nama arahan dan parameter. Gunakan arahan bantuan untuk melihat maklumat bantuan untuk arahan tertentu. Gunakan perintah berhenti untuk keluar dari alat baris arahan.

Cara menyelesaikan kehilangan data dengan redis Cara menyelesaikan kehilangan data dengan redis Apr 10, 2025 pm 08:24 PM

Kerugian data REDIS termasuk kegagalan memori, gangguan kuasa, kesilapan manusia, dan kegagalan perkakasan. Penyelesaiannya adalah: 1. 2. Salin ke beberapa pelayan untuk ketersediaan tinggi; 3. Ha dengan redis sentinel atau cluster redis; 4. Buat gambar untuk membuat sandaran data; 5. Melaksanakan amalan terbaik seperti kegigihan, replikasi, gambar, pemantauan, dan langkah -langkah keselamatan.

See all articles