Analisis contoh model terbitan/langgan Redis
Aplikasi terbitkan/langgan semula
Terbitkan dan langgan (pub/sub) ialah model komunikasi mesej Tujuan utama adalah untuk memisahkan gandingan antara penerbit mesej dan pelanggan mesej kepada corak Pemerhati dalam corak reka bentuk. pub/sub bukan sahaja menyelesaikan gandingan peringkat kod langsung penerbit dan pelanggan, tetapi juga menyelesaikan gandingan kedua-duanya dalam penggunaan fizikal. Sebagai pelayan pub/sub, redis memainkan fungsi penghalaan mesej antara pelanggan dan penerbit. Pelanggan boleh melanggan pelayan redis untuk jenis mesej yang mereka minati melalui arahan langgan dan planggan Redis memanggil jenis mesej sebagai saluran. Apabila penerbit menghantar jenis mesej tertentu kepada pelayan redis melalui arahan terbitkan. Semua pelanggan yang melanggan jenis mesej ini akan menerima mesej ini. Penyampaian mesej di sini adalah banyak-ke-banyak. Pelanggan boleh melanggan berbilang saluran dan menghantar mesej kepada berbilang saluran.
Mari kita mulakan dengan arahan asas:
PSUBSCRIBE pattern [pattern ...] #订阅一个或多个符合给定模式的频道;PUBSUB subcommand [argument [argument ...]] #查看订阅与发布系统状态;PUBLISH channel message #将信息发送到指定的频道;PUNSUBSCRIBE [pattern [pattern ...]] #退订所有给定模式的频道;SUBSCRIBE channel [channel ...] #订阅给定的一个或多个频道的信息;UNSUBSCRIBE [channel [channel ...]] #指退订给定的频道;
Seperti yang anda lihat dari manual redis, sebenarnya, mod "terbit dan langgan" hanya mempunyai 6 arahan satu
LANGGAN
Langgan maklumat daripada saluran atau saluran tertentu.
SUBSCRIBE channel [channel ...]
Melihat dari penjelasan rasmi di atas, permainannya adalah seperti mendengar radio dalam kehidupan sebenar. Apa yang kita lakukan jika kita ingin mendengar radio? Ia mesti di saluran yang betul sahaja kita boleh mendengar program yang baik, jadi kita mesti melanggan saluran terlebih dahulu.
root@localhost:~ # redis-cli -p 6379127.0.0.1:6379> SUBSCRIBE msg Reading messages... (press Ctrl-C to quit) 1) "subscribe"2) "msg"3) (integer) 1 root@localhost:~ # redis-cli -p 6379127.0.0.1:6379> SUBSCRIBE msg Reading messages... (press Ctrl-C to quit) 1) "subscribe"2) "msg"3) (integer) 1
LANGGANAN juga boleh melanggan berbilang saluran, supaya maklumat yang diterima mungkin datang daripada berbilang saluran.
PUBLISH
Sehingga kini, kedua-dua subscibe ini sedang memantau saluran msg Seterusnya, jika ada berita keluar dari saluran msg, pasti akan dilanggan Diterima, mari kita lihat dahulu cara menggunakan arahan ini dalam manual redis.
Hantar mesej maklumat ke saluran saluran yang ditentukan.
PUBLISH channel message
Demonstrasi berikut:
Adakah anda melihat bahawa selepas penerbitan menghantar mesej pada saluran mesej, ia dipantau dengan melanggan dan kemudian dicetak secara berasingan? Output, okay, setakat ini, model publish-subscribe yang paling asas adalah seperti ini. Sebenarnya? ? ? Semudah itu, tetapi kadang-kadang kita masih mempunyai keperluan, iaitu, bolehkah saya padankan dengan kunci? Sebagai contoh, ia dikehendaki melanggan semua saluran dengan awalan china Jika ini boleh dilakukan, ia akan menjadi sangat bagus. . . Jika saya menjawab, pastinya Redis yang perkasa pasti boleh melakukannya, ia memberikan arahan PSUBSCRIBE.
LANGGAN
Langgan satu atau lebih saluran yang sepadan dengan corak tertentu Setiap corak menggunakan sebagai watak yang sepadan semua saluran bermula dengan Saluran bermula dengannya (it.news, it.blog, it.tweets, dll.), berita.* sepadan dengan semua saluran bermula dengan berita (news.it, news.global.today, dsb.), dan seterusnya.
PSUBSCRIBE pattern [pattern ...]
知道了发布和订阅的机制之后,接下来就可以开始研究具体的实现了,我们从Redis的订阅命令开始说起。
SUBSCRIBE命令的实现
前面说到,Redis将所有接受和发送信息的任务交给channel来进行,而所有channel的信息就储存在redisServer这个结构中:
struct redisServer { // 省略 ... dict *pubsub_channels; // Map channels to list of subscribed clients // 省略 ... };
pubsub_channels是一个字典,字典的键就是一个个channel,而字典的值则是一个链表,链表中保存了所有订阅这个channel的客户端。
举个例子,如果在一个 redisServer 实例中,有一个叫做 news 的频道,这个频道同时被client_123 和 client_456 两个客户端订阅,那么这个 redisServer 结构看起来应该是这样子:
可以看出,实现SUBSCRIBE命令的关键,就是将客户端添加到给定channel的订阅链表中。
PSUBSCRIBE命令的实现
除了直接订阅给定channel外,还可以使用PSUBSCRIBE订阅一个模式(pattern),订阅一个模式等同于订阅所有匹配这个模式的channel 。
和redisServer.pubsub_channels属性类似,redisServer.pubsub_patterns属性用于保存所有被订阅的模式,和pubsub_channels不同的是, pubsub_patterns是一个链表(而不是字典):
struct redisServer { // 省略 ... list *pubsub_patterns; // A list of pubsub_patterns // 省略 ... };
pubsub_patterns 的每一个节点都是一个 pubsubPattern 结构的实例,它保存了被订阅的模式,以及订阅这个模式的客户客户端:
typedef struct pubsubPattern { redisClient *client; robj *pattern; } pubsubPattern;
举个例子,假设在一个 redisServer 实例中,有一个叫做 news.* 的模式同时被客户端client_789 和 client_999 订阅,那么这个 redisServer 结构看起来应该是这样子:
现在可以知道,实现PSUBSCRIBE命令的关键,就是将客户端和订阅的模式添加到redisServer.pubsub_patterns当中。
Atas ialah kandungan terperinci Analisis contoh model terbitan/langgan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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

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.

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

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

Pada sistem CentOS, anda boleh mengehadkan masa pelaksanaan skrip LUA dengan mengubah fail konfigurasi REDIS atau menggunakan arahan REDIS untuk mengelakkan skrip jahat daripada memakan terlalu banyak sumber. Kaedah 1: Ubah suai fail konfigurasi Redis dan cari fail konfigurasi Redis: Fail konfigurasi Redis biasanya terletak di /etc/redis/redis.conf. Edit Fail Konfigurasi: Buka fail konfigurasi menggunakan editor teks (seperti Vi atau nano): sudovi/etc/redis/redis.conf Tetapkan had masa pelaksanaan skrip lua: Tambah atau ubah suai baris berikut dalam fail konfigurasi untuk menetapkan masa pelaksanaan maksimum skrip lua (unit: milidor)

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.
