向爬虫而生---Redis 拓宽篇2 <Pub/Sub发布订阅>

这篇具有很好参考价值的文章主要介绍了向爬虫而生---Redis 拓宽篇2 <Pub/Sub发布订阅>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

受甲流影响,这几天瘫卧在床,没有及时更新...希望大家在学习之余,一定也要注意身体,这鬼甲流太厉害了!!

接着上文:向爬虫而生---Redis 拓宽篇1 < pipeline传输效率>-CSDN博客

为什么非要讲一下这个发布订阅问题呢?因为Redis的发布订阅模块与Scrapy爬虫可以结合使用,以实现分布式爬取和数据处理

  1. 分布式消息队列:Scrapy可以使用Redis的发布订阅模块作为分布式消息队列,在多个爬虫节点之间共享URL或任务。发布者将待爬取的URL发布到指定频道,而订阅者在不同的节点上订阅该频道,接收URL并执行相应的爬取任务。
  2. 实时数据处理:使用Redis的发布订阅模块,Scrapy爬虫可以将爬取的数据实时发布到指定频道,而其他消费者可以订阅该频道以获取数据并进行实时处理。这可以用于构建实时监控、数据分析和实时可视化等功能。

正文:

Redis发布订阅(Pub/Sub)是一种广播消息的机制,允许多个订阅者接收同一频道上的消息。

1.发布者(Publish)

发布者使用PUBLISH命令将消息发送到指定频道。语法如下:

PUBLISH channel message

其中,channel是频道的名称,message是要发布的消息内容。该命令会返回成功发送到的订阅者数量。

示例: 假设我们有一个频道名为news,发布者使用以下命令向该频道发布一条消息:

PUBLISH news "Breaking news: Redis 6.0 released!"

这条消息将被发送到订阅了news频道的所有订阅者。

2.订阅者(Subscribe)

订阅者使用SUBSCRIBE命令订阅一个或多个频道,以接收该频道上的消息。

SUBSCRIBE channel [channel ...]

其中,channel是频道的名称。每个订阅者都会创建一个独立的连接来接收消息,并将其阻塞。

示例: 我们创建一个订阅者,并订阅名为news的频道:

SUBSCRIBE news

现在,每当有新消息发布到news频道,该订阅者就会接收到并显示出来。

3.取消订阅(Unsubscribe)

UNSUBSCRIBE命令用于取消对指定频道的订阅。

UNSUBSCRIBE [channel [channel ...]]

可以一次性取消订阅一个或多个频道。

示例: 假设订阅者已经订阅了news频道,现在想要取消对该频道的订阅,在订阅者连接上使用如下命令:

UNSUBSCRIBE news

这样订阅者将不再接收到news频道上的消息。


4.订阅模式(Pattern Subscribe)

Redis还支持订阅模式,订阅者可以通过PSUBSCRIBE命令订阅符合指定模式的频道。

PSUBSCRIBE pattern [pattern ...]

其中,pattern是一个模式字符串,可以使用通配符来匹配多个频道。

示例: 假设我们有两个频道,分别是news.sportsnews.politics,一个订阅者希望订阅所有以news.开头的频道,可以使用如下命令:

PSUBSCRIBE news.*

这样,订阅者将接收到满足该模式的所有频道上发布的消息。

5.退订指定模式(Pattern Unsubscribe)

PUNSUBSCRIBE命令用于退订指定模式的频道。

PUNSUBSCRIBE [pattern [pattern ...]]

可以一次性退订一个或多个模式。

示例: 假设订阅者已经通过PSUBSCRIBE news.*订阅了所有news.开头的频道,现在想要退订这个模式,可以使用如下命令:

PUNSUBSCRIBE news.*

6.列出至少有一个订阅者的频道(List channels with at least one subscriber)

通过PUBSUB CHANNELS命令,可以列出当前至少有一个订阅者的频道。

PUBSUB CHANNELS

示例: 如果我们有两个频道,分别是newsweather,并且有两个订阅者分别订阅了这两个频道,那么使用如下命令:

PUBSUB CHANNELS

将返回:

1) "news"
2) "weather"

7.列出给定频道的订阅者数量(List number of subscribers for a given channel)

通过PUBSUB NUMSUB命令,可以列出给定频道的订阅者数量。可以一次性给出多个频道,返回每个频道及其对应的订阅者数量。

PUBSUB NUMSUB channel [channel ...]

示例: 假设有三个频道:newsweathersports,分别有两个、三个和一个订阅者。我们可以使用以下命令:

PUBSUB NUMSUB news weather sports

将返回:

1) "news"
2) "2"
3) "weather"
4) "3"
5) "sports"
6) "1"

8.列出被订阅模式的数量(List number of subscribed patterns)

使用PUBSUB NUMPAT命令,可以列出当前被订阅模式的数量。

PUBSUB NUMPAT

示例: 在上述的订阅模式示例中,假设当前有两个被订阅的模式,我们可以使用如下命令:

PUBSUB NUMPAT

将返回:

1) "2"

9.订阅者模式(Subscriber Mode)

除了使用SUBSCRIBE命令以外,Redis还提供了一种以订阅者模式来接收消息的方式。通过将订阅者连接标记为SUBSCRIBE,它将接收到的消息转发给其他客户端,作为它们的订阅者。这种方式可以用于构建分布式系统或代理模式。

示例: 我们创建一个订阅者模式的订阅者,在一个SUBSCRIBE连接上使用如下命令:

SUBSCRIBE
案例:

假设我们有一个新闻发布系统,其中一个组件是一个代理订阅者,它会将接收到的新闻消息转发给其他应用程序或服务。我们将使用Redis的订阅者模式来实现这个代理订阅者。

1.创建一个代理订阅者(Proxy Subscriber) 首先,在Redis中创建一个订阅者连接,并标记为SUBSCRIBE,如下所示:
SUBSCRIBE

这个连接会一直阻塞并等待接收消息。

        2.创建其他应用程序或服务 接下来,我们创建两个应用程序或服务,它们订阅了不同的频道,并希望通过代理订阅者来接收新闻消息。
  • 应用程序1订阅news.sports频道:
SUBSCRIBE news.sports
  • 应用程序2订阅news.politics频道:
SUBSCRIBE news.politics
3.发布新闻 现在,让我们假设有一条新闻需要发布。发布者使用PUBLISH命令将消息发布到news.sportsnews.politics频道,如下所示:
PUBLISH news.sports "Breaking news: Redis Pub/Sub is awesome!"
PUBLISH news.politics "Breaking news: Redis Pub/Sub is popular!"
4.代理订阅者转发消息 当发布者发布消息后,代理订阅者会接收到这两条消息,并将它们转发给相应的应用程序或服务。应用程序1将接收到第一条消息,应用程序2将接收到第二条消息。这样,代理订阅者充当了信息转发的角色。

10.退订所有频道和模式(Unsubscribe all channels and patterns)

如果要退订订阅者已经订阅的所有频道和模式,可以使用UNSUBSCRIBE命令,不带任何参数即可。

示例: 假设订阅者当前订阅了两个频道,newsweather,以及一个模式news.*。要一次性退订所有频道和模式,可以在订阅者连接上使用如下命令:

UNSUBSCRIBE

11.订阅单个频道的阻塞(Blocking for a single-channel subscription)

Redis Pub/Sub还支持以阻塞模式订阅单个频道。使用SUBSCRIBE命令后,订阅者连接会一直阻塞,直到有消息发布到指定频道。

示例: 假设我们有一个频道messages,我们可以创建一个阻塞订阅者连接,并订阅该频道,如下所示:

SUBSCRIBE messages

这将阻塞订阅者连接,直到有消息在messages频道上发布。

注意事项:

  1. 支持的并发连接数:Redis默认的最大客户端连接数是10000。当使用大量的订阅者或发布者时,要确保Redis服务器足够支持所需的并发连接数。
  2. 消息持久化:Redis的发布订阅模块不会持久化消息。如果需要将消息保存到磁盘并在重启后恢复,可以使用Redis的持久化功能,如RDB快照或AOF日志。
  3. 消息顺序性:Redis的发布订阅模块不保证消息的顺序性。如果应用程序对消息的顺序有要求,需要在应用层进行处理。
  4. 网络延迟:由于Redis使用TCP协议进行通信,存在网络延迟的可能性。在高延迟的网络环境中,消息的传递可能会有一定的延迟。

 文章来源地址https://www.toymoban.com/news/detail-781939.html

到了这里,关于向爬虫而生---Redis 拓宽篇2 <Pub/Sub发布订阅>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis发布订阅

    Redis 发布订阅(pub/sub)是一种 消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 Redis 客户端可以订阅任意数量的频道。 订阅/发布消息图: 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系: 当有新消息通过 PUBLISH

    2024年02月11日
    浏览(38)
  • Redis(03)——发布订阅

    基于频道 publish channel message:将信号发送到指定的频道 pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态 subscribe channel [channel]:订阅一个或多个频道的信息 unsubscribe [channel [channel]]:退订指定的频道,若没有指定频道,则默认退订所有频道 基于模式 psubcribe pattern [pa

    2024年02月20日
    浏览(36)
  • redis 发布和订阅

    目录 一、简介  二、常用命令 三、示例 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 ,以及订阅这个频道的三个客户端 —— client1 、client2 和 client3 之间的关系: 当

    2024年02月12日
    浏览(35)
  • redis发布订阅模式的应用

    小体量系统,某些特定场景需要做异步处理。如操作日志记录、发送消息、数据excel导入等。并发量不大,主要作用是异步批处理数据,提高响应速度,改善用户体验,不至于页面卡半天。用消息队列的话显得很笨重,牛刀杀鸡,不利于项目的快速布署和影响项目稳定。在这

    2024年02月11日
    浏览(43)
  • JAVA 实现 Redis 发布订阅

    发布订阅: 消息发布者发布消息 和 消息订阅者接收消息 ,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会派送给我们 Redis 发布订阅(pub/su

    2024年02月14日
    浏览(36)
  • Redis 消息队列和发布订阅

    采用redis 三种方案: ● 生产者消费者:一个消息只能有一个消费者 ● 发布者订阅者:一个消息可以被多个消费者收到 ● stream模式:实现队列和广播模式 Producer调用redis的lpush往特定key里放消息,Consumer调用brpop去不断监听key。 1、利用redis的链表,存储数据,实现队列模式

    2024年01月18日
    浏览(42)
  • Redis消息传递:发布订阅模式详解

    目录 1.Redis发布订阅简介 2.发布/订阅使用    2.1 基于频道(Channel)的发布/订阅    2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制    3.1 基于频道(Channel)的发布/订阅如何实现的?    3.2 基于模式(Pattern)的发布/订阅如何实现的?    3.3 SpringBoot结合Redis发布

    2024年02月12日
    浏览(42)
  • Redis实现消息的发布和订阅

    4.1 发送消息 4.2 接收消息

    2024年02月13日
    浏览(40)
  • Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

    目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之后出现的错误

    2024年01月24日
    浏览(49)
  • Redis发布订阅机制学习|kafka相关经验

    Redis 键值数据库 key value NoSql 第一章: 差异 #1 structured 结构化 约束 primary unique unsigned #2 relational 关联的 #3 SQL查询 例 select id, name, age from tb_user where id=1 redis get user:1 mongoDB db.users.find({_id: 1}) elasticsearch GET http://localhost:9200/users/1 #4 事务 ACID 基本一致 无事务 键值类型 Redis 文档类

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包