返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP实现redis订阅和发布(用于异步任务处理)
  • 385
分享到

PHP实现redis订阅和发布(用于异步任务处理)

PHP实现redis订阅和发布(用于异步任务处理) 2022-04-26 01:04:08 385人浏览 才女
摘要

1.概念名称及含义channel 频道:生产者和消费者直接操作的对象publish 生产者:向channel发送消息subscribe 消费者:订阅一个或多个channelpsubscribe 消费者:匹配订阅一个或多个chann

PHP实现redis订阅和发布(用于异步任务处理)

1.概念
名称及含义
channel 频道:生产者和消费者直接操作的对象
publish 生产者:向channel发送消息
subscribe 消费者:订阅一个或多个channel
psubscribe 消费者:匹配订阅一个或多个channel
punsubscribe 退订:匹配退订,无参数则退订全部channel
unsubscribe 退订:退订指定的channel,无参数则退订全部channel
pubsub 列出当前活动channel(至少有一个订阅)

2.注意事项
1)生产者publish消息时打开一个连接,publish后连接可以立即关闭
2)channel只接收publish发送的消息,自身不存储消息,如果channel没有被订阅,则消息丢弃
3)订阅的消费者需要一直在线,阻塞获取消息,连接断开表示立即退订

3.redis可以实现发布订阅和消息队列的功能,两者的区别在于:
1)Redis的订阅者可以是多个,且可以同时处理发布上来的消息,如果订阅者不在线(服务没有启动)消息将丢失,消息没有持久化。发布和订阅是一块执行的,缺少一个直接忽略这个消息
2)消息队列只能有一个客户端来处理,处理完之后消息就被标记或删除,即使服务端没有启动消息也不会丢失
3)两者的使用场景要根据业务数据的准确度,敏感性决定,比如日志就可以用redis发布订阅来实现,丢失一点也没有关系

4.直接使用php-redis扩展提供的方法实现发布订阅
1)消费者订阅Subscribe.PHP
php
//设置php脚本执行时间
set_time_limit(0);
//设置Socket连接超时时间
ini_set("default_socket_timeout", -1);
//声明测试频道名称
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
try {
  $redis = new Redis();
  //建立一个长链接
  $redis->pconnect("ip", 6379);
  //阻塞获取消息
  $redis->subscribe(array($channelName, $channelName2), function ($redis, $chan, $msg) {
    echo "channel:".$chan.",message:".$msg." ";
  });
} catch (Exception $e) {
  echo $e->getMessage();
}

2)生产者发送消息Publish.php
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
//向指定频道发送消息
try {
  $redis = new Redis();
  $redis->connect("192.168.75.132", 6379);
  for ($i=0;$i<5;$i++) {
    $data = array("key" => "key".$i, "data" => "testdata");
    $ret = $redis->publish($channelName, JSON_encode($data));
    print_r($ret);
  }
} catch (Exception $e) {
  echo $e->getMessage();
}

3)执行消费者订阅,开始阻塞获取消息php Subscribe.php

4)执行生产者,开始发送消息php Publish.php

php .Publish.php
22222
#返回执行结果:频道的订阅数量
查看消费者终端

php .Subscribe.php
channel:testPubSub,message:{"key":"key0","data":"testdata"}
channel:testPubSub,message:{"key":"key1","data":"testdata"}
channel:testPubSub,message:{"key":"key2","data":"testdata"}
channel:testPubSub,message:{"key":"key3","data":"testdata"}
channel:testPubSub,message:{"key":"key4","data":"testdata"}

转自:https://www.jmsite.cn/blog-586.html

 

--结束END--

本文标题: PHP实现redis订阅和发布(用于异步任务处理)

本文链接: https://lsjlt.com/news/5619.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP实现redis订阅和发布(用于异步任务处理)
    1.概念名称及含义channel 频道:生产者和消费者直接操作的对象publish 生产者:向channel发送消息subscribe 消费者:订阅一个或多个channelpsubscribe 消费者:匹配订阅一个或多个chann...
    99+
    2022-04-26
    PHP实现redis订阅和发布(用于异步任务处理)
  • 利用Redis实现分布式消息发布订阅
    利用Redis实现分布式消息发布订阅在分布式系统中,消息的发布和订阅是常用的通信模式。在这个模式下,消息发布者将消息发送给一个或多个主题,订阅者则订阅感兴趣的主题,并接收相应的消息。为了实现这个模式,我们可以借助Redis这个高性能的内存数...
    99+
    2023-11-07
    分布式 redis 消息订阅
  • 如何利用Redis和C++实现发布-订阅功能
    如何利用Redis和C++实现发布-订阅功能,需要具体代码示例引言:Redis是一种开源的高性能键值存储系统,它支持多种数据结构,并提供了一系列的客户端库,适用于各种编程语言。Redis的发布-订阅功能是其最常用的功能之一,可以实现消息的发...
    99+
    2023-10-22
    C++ redis 发布订阅
  • Redis发布订阅和实现.NET客户端详解
    前言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新。 然而它也有自己的缺点,就是当主题发生一系列的变化时,观察...
    99+
    2022-06-04
    详解 客户端 Redis
  • Redis实现消息的发布订阅原理分析
    目录一、什么是发布和订阅二、Redis的发布和订阅三、redis 发布订阅常用命令四、命令实战1、基本使用2、订阅符合要求的频道3、查看活跃频道五、发布订阅原理1、订阅频道原理2、发布信息原理3、退订信息原理一、什么是发...
    99+
    2022-07-25
    Redis消息发布 Redis消息订阅
  • Springboot整合redis实现发布订阅功能介绍步骤
    目录一、redis发布订阅简介二、几个核心概念解释三、适用场景四、与springboot的整合1、导入基础依赖2、配置文件3、自定义RedisSubConfig4、自定义消息监听器5...
    99+
    2024-04-02
  • redis实现队列的阻塞、延时、发布和订阅
    目录普通队列阻塞队列发布订阅模式延时队列和优先级队列应用场景Redis不仅可作为缓存服务器,还可以用作消息队列。它的列表类型天生支持用作消息队列。如下图所示: 由于Redis的列表...
    99+
    2024-04-02
  • 怎么利用Jedis实现Redis的订阅与发布
    怎么利用Jedis实现Redis的订阅与发布?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是Redis发布订阅Redis发布订阅是一种消息通信模式,发送者通...
    99+
    2023-05-31
    redis jedis
  • 使用python实现mqtt的发布和订阅
     使用python编写程序进行测试MQTT的发布和订阅功能。首先要安装:pip install paho-mqtt 我的MQTT部署在阿里云的服务器上面,所以我在本机上编写了python程序进行测试。然后在shell里面重新打开一个终端,...
    99+
    2023-01-31
    python mqtt
  • Redis中的发布订阅和事务怎么使用
    本篇内容主要讲解“Redis中的发布订阅和事务怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis中的发布订阅和事务怎么使用”吧!发布订阅redis的发布订阅系统有点类似于我们生活中...
    99+
    2023-06-19
  • Redis | 第8章 发布订阅与事务《Redis设计与实现》
    目录前言《Redis常用命令及示例总结(API)》:https://www.cnblogs.com/dlhjw/p/15639773.html1. 发布订阅1.1 频道的订阅与退订1.2 模式的订阅与退订1.3 发送消息1.4 查看订阅消...
    99+
    2016-06-20
    Redis | 第8章 发布订阅与事务《Redis设计与实现》
  • redis怎么实现队列阻塞、延时、发布和订阅
    这篇“redis怎么实现队列阻塞、延时、发布和订阅”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“redis怎么实现队列阻塞、...
    99+
    2023-07-02
  • 如何利用Redis实现分布式消息发布与订阅
    如何利用Redis实现分布式消息发布与订阅引言:在分布式系统中,消息发布与订阅是一种常见的通信模式,可以实现不同模块之间的解耦。Redis作为一种高性能的键值对存储系统,可以用来实现分布式消息发布与订阅功能。本文将介绍如何使用Redis来实...
    99+
    2023-11-07
    分布式 redis 消息发布
  • redis如何实现队列的阻塞、延时、发布和订阅
    这篇文章主要介绍了redis如何实现队列的阻塞、延时、发布和订阅的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis如何实现队列的阻塞、延时、发布和订阅文章都会有所收获,下...
    99+
    2024-04-02
  • PHP中使用Redis实现异步处理
    随着互联网的发展,Web应用程序的性能和效率成为了关注的焦点。而PHP是一种常用的Web开发语言,Redis则是一款流行的内存数据库,如何将二者结合起来提高Web应用程序的性能和效率就成为了一个重要的问题。Redis是一个非关系型内存数据库...
    99+
    2023-05-16
    PHP redis 异步处理
  • PHP异常处理:捕获和处理异步任务错误
    php中异常处理通过try-catch-finally块实现,允许捕获和处理异步任务错误,以确保系统稳定性。具体操作步骤包括:获取文件、处理文件、存储文件、捕获异常(如记录错误和发送电子...
    99+
    2024-05-14
    php 异常处理 代码可读性
  • PHP中如何使用Redis实现异步处理
    这篇“PHP中如何使用Redis实现异步处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP中如何使用Redis实现异步...
    99+
    2023-07-06
  • 怎么用redis发布订阅方式实现简易的消息系统
    这篇文章主要讲解了“怎么用redis发布订阅方式实现简易的消息系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用redis发布订阅方式实现简易的消息系统”吧!I. 基本使用1. 配置我...
    99+
    2023-06-19
  • PHP开发中如何优化异步任务调度和处理
    一、异步任务调度的优化在PHP开发中,异步任务调度的优化主要包括以下几个方面:使用消息队列:消息队列是一种将消息异步发送到中间件的方式,实现了任务的解耦和异步处理。常见的消息队列中间件有RabbitMQ、Kafka等。以下是一个使用Rabb...
    99+
    2023-10-21
    内存管理 异常处理 并发控制
  • Django 中的并发请求处理:使用 Celery 实现异步任务。
    Django 中的并发请求处理:使用 Celery 实现异步任务 在现代 Web 应用程序中,处理并发请求是至关重要的。Django 是一个强大的 Web 框架,但是它并不擅长处理大量的并发请求。为了解决这个问题,我们可以使用 Celery...
    99+
    2023-08-08
    并发 apache django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作