Rumah> pangkalan data> Redis> teks badan

Redis学习笔记之发布订阅

WBOY
Lepaskan: 2022-06-17 13:56:28
ke hadapan
1898 orang telah melayarinya

本篇文章给大家带来了关于Redis的相关知识,其中主要介绍了关于发布订阅的相关问题,Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,下面一起来看一下,希望对大家有帮助。

Redis学习笔记之发布订阅

推荐学习:Redis视频教程

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

订阅/发布消息图:

第一个对象:消息发送者。第二个对象:频道。第三个对象:消息订阅者。

在这里插入图片描述

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

在这里插入图片描述

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

在这里插入图片描述

命令 描述
Publish channel message 命令 将信息发送到指定的频道。
SUBSCRIBE channel [channel …] 订阅给定的一个或多个频道的信息。
UNSUBSCRIBE channel [channel …] 指退订给定的频道。
[PUNSUBSCRIBE pattern [pattern …]] 退订所有给定模式的频道。
[PUBSUB argument [argument …] 查看订阅与发布系统状态。
PSUBSCRIBE pattern [pattern …] 订阅一个或多个符合给定模式的频道。

测试

订阅端:

127.0.0.1:6379> subscribe mianbao # 订阅频道 mianbao Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "mianbao" 3) (integer) 1 # 等待读取推送的消息 1) "message" # 消息 2) "mianbao" # 频道 3) "hello" # 消息内容 1) "message" 2) "mianbao" 3) "hello redis"
Salin selepas log masuk

发送端:

127.0.0.1:6379> publish mianbao "hello" # 发送消息到频道 (integer) 1 127.0.0.1:6379> publish mianbao "hello redis" (integer) 1
Salin selepas log masuk

原理:

Redis是使用C实现的,通过分析Redis源码里的pubsub.c文件,了解发布和订阅机制的底层实现,籍此加深对 Redis的理解。

Redis通过PUBLISH、SUBSCRIBE 和PSUBSCRIBE等命令实现发布和订阅功能。

通过SUBSCRIBE命令订阅某频道后,redis-server里维护了一个字典,字典的键就是一个个channel(频道),而字典的值则是一个链表,链表中保存了所有订阅这个channel的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel的订阅链表中。

通过PUBLISH命令向订阅者发送消息,redis-server会使用给定的频道作为键,在它所维护的channel字典中查找记录了订阅这个频道的所有客户端的链表,遍历这个链表,将消息发布给所有订阅者。

Pub/Sub 从字面上理解就是发布 ( Publish )与订阅(Subscribe ),在Redis中,你可以设定对某个key值进行消息发布及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。


稍微复杂的场景我们会使用消息中间件:RabbitMQ、RocketMQ、ActiveMQ、kafka

推荐学习:Redis视频教程

Atas ialah kandungan terperinci Redis学习笔记之发布订阅. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!