Jadual Kandungan
Beberapa arahan senarai
Baris gilir demo menggunakan arahan
Masalah pengundian kosong
Rumah pangkalan data Redis Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Dec 10, 2021 am 10:02 AM
redis baris gilir mesej

Bagaimanakah Redis melaksanakan baris gilir mesej dan baris gilir mesej tertunda? Artikel berikut akan memperkenalkan kepada anda kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis Saya harap ia akan membantu anda!

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Apabila menyebut tentang redis, lebih ramai orang mungkin menganggap penggunaannya sebagai cache Malah, redis juga boleh melaksanakan beberapa baris gilir mesej yang mudah Kami boleh menggunakan data senarai struktur untuk melaksanakan baris gilir. [Cadangan berkaitan: Tutorial video Redis]

Beberapa arahan senarai

lpush (tolak kiri)

dengan baris gilir

rpush (tolak kanan)

disimpan dari sebelah kanan baris gilir

lpop (pop kiri)

dibawa keluar dari sebelah kiri baris gilir

rpop (pop kanan)

Keluarkan dari sebelah kanan baris gilir

Empat perintah di atas boleh membenarkan senarai membantu kami melaksanakan ciri gilir atau tindanan baris gilir maju Mula-mula keluar, ciri tindanan ialah masuk dahulu, keluar terakhir,

jadi baris gilir boleh dilaksanakan menggunakan lpush rpop atau rpush lpop, dan

tindanan boleh dilaksanakan menggunakan lpush lpop atau rpush rpop.

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Baris gilir demo menggunakan arahan

Pengeluar menerbitkan mesej

Mula-mula kami menggunakan rpush untuk menambah lima elemen pada baris gilir yang dipanggil notify-queue, iaitu 1 2 3 4 5, iaitu untuk menerbitkan mesej sebagai pengeluar

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Berita penggunaan pengguna

Memandangkan pengeluar menggunakan rpush, pengguna mesti menggunakan lpop Anda boleh melihat gambar di bawah Kami terus memberitahu -beratur menggunakan mesej, dari 1 hingga 5, dan membacanya mengikut urutan Akhirnya, tiada mesej dalam baris gilir, dan pop timbul sentiasa kosong

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Masalah pengundian kosong

Apabila menggunakan lpop untuk menggunakan mesej di atas, anda dapat melihat bahawa selepas mesej itu digunakan, setiap kali kita pergi ke pop semula, apa yang kita baca adalah mesej kosong,

Di atas adalah pelaksanaan manual arahan, tetapi jika program kod bertulis terus muncul data (menarik data), ia akan menyebabkan pengundian kosong (bacaan tidak berguna),

kedua-duanya akan menarik tinggi Ia meningkatkan penggunaan CPU klien, meningkatkan QPS redis , dan masih merupakan operasi yang tidak berguna ini boleh menyebabkan pelanggan lain mengakses redis menjadi kurang responsif.

Penyelesaian A (hibernasi)

Memandangkan pengundian kosong akan menyebabkan penggunaan sumber yang lebih tinggi pada kedua-dua pelanggan dan redis, maka Kami boleh membiarkan pelanggan tidur selama 1 saat apabila menerima data kosong, dan kemudian tarik data selepas 1 saat, yang boleh mengurangkan penggunaan

Thread.sleep(1000)

Penyelesaian ini juga mempunyai kelemahan Ya, iaitu kelewatan dalam penggunaan mesej telah meningkat Jika terdapat hanya satu pengguna, kelewatan adalah 1s, iaitu, selepas pengundian kosong, ia berlaku untuk tidur, tetapi pada masa ini, mesej akan datang, dan ia masih perlu menunggu sehingga 1s. untuk bangun sebelum penggunaan ,

Jika terdapat berbilang pengguna, memandangkan masa tidur setiap pengguna berperingkat, beberapa kependaman akan dikurangkan, tetapi adakah terdapat cara yang lebih baik untuk mencapai hampir 0 kependaman?

Penyelesaian B (menyekat bacaan)

Sebenarnya terdapat dua arahan dalam redis tentang pengambilan data baris gilir, iaitu menyekat bacaan,

blpop (menyekat pop kiri)

brpop (menyekat pop kanan)

Menyekat bacaan akan memasuki keadaan tidak aktif apabila tiada data dalam baris gilir Sebaik sahaja mesej datang, Kemudian bertindak balas dengan segera dan baca data, jadi menggunakan blpop/brpop untuk menggantikan lpop/rpop boleh menyelesaikan masalah kelewatan mesej

Teruskan menambah 3 atribut pada baris gilir, 6, 7, 8

<.>Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Gunakan blpop untuk membaca baris gilir Parameter terakhir ialah masa menunggu untuk menyekat bacaan operasi blpop.

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Masalah pemotongan automatik sambungan melahu untuk menyekat bacaan

Apabila pelanggan menggunakan menyekat bacaan, jika masa menyekat terlalu lama, Perkhidmatan ini secara amnya akan menganggapnya sebagai sambungan melahu dan memutuskannya secara aktif untuk mengurangkan sumber yang diduduki oleh sambungan yang tidak berguna Pada masa ini, pelanggan akan membuang pengecualian,

Jadi sila ambil perhatian bahawa apabila pelanggan menggunakan bacaan menyekat, Ia adalah perlu untuk menangkap pengecualian dan mengendalikannya dengan sewajarnya, seperti mencuba semula.

pelanggan java melaksanakan baris gilir mesej

Ideanya adalah sama seperti di atas, kecuali klien baris arahan redis-cli ditukar kepada java bahasa. Satu utas atau beberapa utas melaksanakan penerbitan rpush,

Satu lagi atau lebih utas melakukan penggunaan blpop Kod yang lengkap ialah di: https://github.com/qiaomengnan16/redis-demo/tree/main/redis-queue

Penerbit <. .> Gilir kelewatan bermaksud bahawa mesej itu dimakan oleh pengguna selepas tempoh masa selepas ia dihantar, bukannya dibaca oleh pengguna sebaik sahaja ia dihantar. lakukan ini. Mula-mula, zset boleh diisih mengikut skor, dan skor boleh menyimpan cap masa Jadi setiap kali kami menerbitkan mesej, kami menggunakan cap masa semasa ditambah dengan cap masa tertunda,

Apabila pengguna kemudiannya mendapatkan semula mesej itu. , ia memintas data zset dan memperoleh mesej yang telah memenuhi masa semasa (iaitu, data dengan skor kurang daripada atau sama dengan cap masa semasa diperolehi. Skor kurang daripada atau sama dengan cap masa semasa bermakna mesej itu sudah sampai masanya jika lebih besar bermakna anda perlu menunggu sebentar sebelum dimakan). Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Arahan utama zadd (penerbit), zrangebyscore (pelanggan), zrem (pelanggan memadam selepas menggunakan data)

Pelaksanaan arahan

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Kami menggunakan zadd untuk menambah 4 keping data, iaitu data yang boleh digunakan selepas 1, 2, dan 3 saat (pseudo-speak, ini sebenarnya hanya skor), dan terdapat juga kafka yang boleh dimakan selepas 10 saat.

Jika sekarang adalah saat ketiga, kami mengambil data dalam zset yang lebih besar daripada atau sama dengan 1 saat dan kurang daripada atau sama dengan 3 saat, kerana data dalam selang ini adalah apa yang kita boleh gunakan Ya, anda boleh lihat bahawa kami telah mengeluarkan 3 keping data yang memenuhi syarat,

Jika anda boleh sahaja menggunakan satu keping data pada satu masa, anda boleh menambah syarat sekatan had, anda boleh melihat Rajah di bawah mengeluarkan data pertama yang boleh digunakan, redis

Pada pada masa yang sama, ambil perhatian bahawa ia berbeza daripada lpop/ dan blpop of list (mereka akan memadamkan data secara automatik dalam baris gilir asal apabila ia muncul) data),

Walaupun data diperoleh, jika anda melakukannya jangan gunakan zrem untuk memadamnya, data ini akan tetap dibaca oleh orang lain, kerana ia masih wujud dalam zset,

tetapi zrem Mungkin berlaku bahawa ia telah dipadam (dimakan) oleh orang lain dahulu, jadi kod itu juga perlu menilai sama ada nilai pulangan zrem lebih besar daripada 0 untuk menentukan sama ada kita telah berjaya mendahului mesej ini, dan kemudian menggunakannya dengan betul selepas berjaya.

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Pelaksanaan Kod

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Penerbit

Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Pelanggan

Uji kesan kelewatan

Alamat kod penuh: https ://github.com/qiaomengnan16/redis-demo/tree/main/redis-delayed-queue

1Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Pengoptimuman, menggunakan lua untuk melaksanakan

Terdapat masalah dalam delay queue yang dilaksanakan di atas Apabila menggunakan zrem untuk menentukan sama ada data telah direbut, kemungkinan besar ia tidak direbut Jika anda terus membaca seperti ini, anda mungkin tidak dapat ambilnya untuk beberapa pusingan, dan sumber terbuang Oleh itu, pengoptimuman boleh dilakukan melalui skrip Lua 1Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Biarkan zrangebyscore dan zrem menjadi operasi atom, yang boleh mengelakkan perbalahan berbilang benang dan pembaziran sumber yang tidak boleh. direbut.

1Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam Redis

Kesimpulan

Sesetengah perisian tengah gilir profesional akan menjadi lebih rumit untuk digunakan dan Meningkatkan operasi dan kos penyelenggaraan, seperti RabbitMQ Sebelum menghantar mesej, anda perlu membuat suis Pertukaran dan kemudian membuat Baris Beratur Kemudian Pertukaran dan Baris perlu terikat Apabila menghantar mesej, anda mesti menentukan kekunci penghalaan padankan Pertukaran dan akhirnya mencapai Baris Gilir Jika senarionya mudah, anda boleh menggunakan redis untuk melaksanakan baris gilir, tetapi perlu diperhatikan bahawa redis tidak mempunyai ciri baris gilir profesional, dan terdapat tiada jaminan ack, yang bermaksud bahawa mesej itu tidak boleh dipercayai Selepas penggunaan gagal, ia akan hilang Jika anda memerlukan kebolehpercayaan 100%, anda masih perlu menggunakan perisian tengah gilir profesional dan mekanisme lain seperti ack sebagai jaminan.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:

Pengenalan kepada Pengaturcaraan

! !

Atas ialah kandungan terperinci Perbincangan ringkas mengenai kaedah pelaksanaan baris gilir mesej dan baris gilir mesej tertunda dalam 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

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.

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 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.

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 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.

See all articles