php高级 TP+Redis实现发布订阅和消息推送案例实战

news2024/10/5 20:26:50

Redis 的发布-订阅模型是一种消息通信模式,它允许客户端之间通过特定的频道进行通信。在这种模型中,有些客户端负责发布消息(发布者),而其他客户端则订阅它们感兴趣的频道并接收这些消息(订阅者)。

以下是 Redis 发布订阅的基本操作:

  1. SUBSCRIBE:订阅者使用此命令订阅一个或多个频道的消息。
  2. PUBLISH:发布者使用此命令向指定的频道发送消息。
  3. UNSUBSCRIBE:订阅者使用此命令取消订阅一个或多个频道的消息。
  4. PUNSUBSCRIBE:订阅者使用此命令取消订阅所有频道的消息。

这种模型非常适合实现实时应用,如实时通知、实时分析、实时数据更新等。

第一步: 在index/controller文件中创建个控制器 Publish.php 文件

<?php
namespace app\mainapp\controller;

use app\mainapp\BaseController;
use think\cache\driver\Redis;
class Publish extends BaseController
{		
		protected $redis;
		
		public function __construct(){
			$redis = new Redis(Config::get('cache.stores.redis'));
			$redis->connect('127.0.0.1',6379);
			$this->redis = $redis;
			
		}
		
		//发布消息的控制器方法
		public function index()
		{
			
			//$this->redis->publish('频道名称','发布内容');
			//定义一个频道方法,往这个频道发布消息,频道名称:中英文都可以
			$res = $this->redis->publish('sixStar:index','发布内容');
			var_dump('发布订阅消息成功,接受者数量为:'.$res);
			
			//关闭
			$this->redis->close();
		}



		//订阅多个频道:
		//api
		public function api()
		{
			$this->redis->publish('sixStar:api','api平台开发专栏');
		}
		
		//swoole
		public function swoole()
		{
			$this->redis->publish('sixStar:swoole','swoole网络编程专栏');
		}
}

第二步 在项目 application/command.php中 加入一条指令,可参考 TP 添加定时任务 - 自定义指令

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: dqh <dqh@163.com>
// +----------------------------------------------------------------------

// +----------------------------------------------------------------------
// | 控制台配置
// +----------------------------------------------------------------------
return [
    // 指令定义
    'commands' => [
		'hello' => 'app\command\Subscribe',
    ],
];
<?php
/**
 * 自定义指令 - tp+redis实现发布订阅和消息推送
 */
namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\cache\driver\Redis;


class Subscribe extends Command
{
    protected function configure()
    {
        $this->setName('subscribe')->setDescription('接收订阅消息');
    }

    protected function execute(Input $input, Output $output)
    {
		
		$redis = new Redis();
			$redis->connect('127.0.0.1', 6379);
			
			//订阅这个频道,获取频道消息
			/*$res = $redis->subscribe(['sixStar:index'],function($instance,$channel,$message){//实例,频道,消息
				//$res = $redis->subscribe(['sixStar:index',''],function($instance,$channel,$message){//实例,频道,消息
				var_dump($message);
				//业务逻辑:发送短信,推送给用户等等
			});
			*/
			
			//匹配适应规则的所有的频道消息
			$res = $redis->psubscribe(['sixStar:*'],function($instance,$rule,$channel,$message){//实例,规则,频道,消息
				var_dump($message);
				//业务逻辑:发送短信,推送给用户等等
			});
			
        $output->writeln( date('Y-m-d H:i:s'));//输出内容
    }
}

第二步  执行

php think

 会有一条 subscribe 指令的命令

 php think subscribe

这样就订阅成功了
用postman 请求 Publish/index 发布消息的控制器方法 就能收到一条订阅 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶汽车下匝道路径优化控制策略研究

摘要 随着社会不断进步&#xff0c; 经济快速发展&#xff0c; 科学技术也在突飞猛进&#xff0c; 交通行业是典型的领域之一。现阶段的交通发展&#xff37; 实现智能交通系统为目标&#xff0c; 正逐渐从信息化步入智能化&#xff0c;朝着智慧化迈进。近年来&#xff0c;一系…

线程练习题

有三个线程&#xff0c;分别只能打印A&#xff0c;B和C&#xff0c;要求按顺序打印ABC&#xff0c;打印10次 输出示例&#xff1a; ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC &#xff08;1&#xff09;、这种方法并不能达到题目要求&#xff0c;因为无法确认当线程…

ChatGPT AIGC 实现Excel行列多条件交叉查找

查找函数在Excel中一直是非常重要的知识点,我们让ChatGPT AIGC来总结一下关于查找函数的优点与了处。 Excel中的查找函数是一种非常强大且多用途的工具,具有以下优点和作用: 1. 数据定位:查找函数可以帮助我们在大量数据中快速定位某个特定的数据或信息。 2. 数据整理:如…

sql注入之高权限注入和文件读写

死在山野的风里&#xff0c;活在自由的梦里 sql注入之高权限注入 高权限注入1.多个网站共享mysql服务器2.MySQL 权限介绍3.注入流程查询所有数据库名称查询表名对应的字段名查询数据 文件读写1.文件读写注入的原理2.文件读写注入的条件3.读取文件4.写入文件 高权限注入 在数据…

linux jenkins2.414.1-1.1版本安装

文章目录 前言一、rpm文件下载二、安装jenkins2.1.升级jdk1.82.2安装jenkins2.3 启动服务2.4 使用密码登录2.5 修改插件源2.6 汉化插件安装演示 总结 前言 之前也安装过jenkins&#xff0c;但是那个版本是2.1的&#xff0c;太老了很多插件都不支持&#xff0c;现在安装目前为止…

2022年全国研究生数学建模竞赛华为杯D题PISA架构芯片资源排布问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 D题 PISA架构芯片资源排布问题 原题再现&#xff1a; 一、背景介绍 芯片是电子行业的基础&#xff0c;在当前日益复杂的国际形势下&#xff0c;芯片成了各个大国必争的高科技技术。本课题关注网络通信领域的交换芯片&#xff0c;传统的交…

5.5G的技术原理和应用场景

引言 5.5G即5G-Advanced&#xff0c;是一种移动通信技术。 这个解释显然十分的boring&#xff0c;但是在5.5G还未正式进入大家生活的今天&#xff0c;这是百度词条给出为数不多的解释。 当今社会&#xff0c;移动通讯已成为人们生活中不可缺少的一部分。2G打开了文本时代&…

C/C++ 代码中使用 CMake 工程目录

C/C 代码中使用 CMake 工程目录 文章目录 C/C 代码中使用 CMake 工程目录使用原因如何使用参考链接 使用原因 在 C 代码中获取工程路径有点麻烦&#xff0c;因为如果生成的可执行文件(.exe) 位置与工程目录不同&#xff0c;则当前的路径为运行时的路径&#xff0c;可能需要通过…

H.265 视频在浏览器中的播放问题探究

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

华为OD机考算法题:MVP争夺战

目录 题目部分 解读与分析 代码实现 题目部分 题目MVP争夺战难度易题目说明在星球争霸篮球赛对抗赛中&#xff0c;强大的宇宙战队&#xff0c;希望每个人都能拿到MVP。 MVP的条件是&#xff0c;单场最高分得分获得者&#xff0c;可以并列&#xff0c;所以宇宙战队决定在比赛…

【Axure高保真原型】桥梁监控大屏可视化案例

今天和大家分享桥梁监控大屏可视化案例的原型模板&#xff0c;包括桥梁预警次数统计、预警类型分析、实时预警分析、通行趋势分析、通行类型分析、热门桥梁分析&#xff0c;里面包含多个高保真的图表模板&#xff08;多柱状图组、滚动列表、多面积图、排名图、玫瑰图&#xff0…

(未完成)【Redis专题】一线大厂Redis高并发缓存架构实战与性能优化

前言 在本章内容里&#xff0c;我希望大家还是要先看看【前置知识】的内容。按照我的大纲设计&#xff0c;我是想先给大家抛出一些大家比较陌生的&#xff0c;关于【Redis缓存问题以及缓存方案】的一些名词概念&#xff0c;再然后在正文【课程内容】里面给大家使用源码案例&am…

SQL9 查找除复旦大学的用户信息

描述 题目&#xff1a;现在运营想要查看除复旦大学以外的所有用户明细&#xff0c;请你取出相应数据 示例&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20北京大学Beijing42315female23浙…

postman连接websocket, 建立连接、聊天测试(v8.5.1)

1. postman v8.5版本 以上支持 websocket。 2. 选择websocket请求模块File - New... 3. WebSocketServer.java import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.Server…

ChatGPT提示词(prompt)资源汇总

文章目录 awesome-chatgpt-promptsLearn PromptingSnack PromptFlow GPTPrompt VineChatGPT 指令大全AI Toolbox HubAI Short ChatGPT是一种强大的生成式AI模型&#xff0c;而提示词&#xff08;prompt&#xff09;则是与ChatGPT一起使用的指导性文本&#xff0c;用于引导模型生…

Redis的用法及面试题(删除策略、企业级解决方案)

目录 一、Redis删除策略 &#xff08;1&#xff09;过期数据 &#xff08;2&#xff09;数据删除策略 1.定时删除 2.惰性删除 &#xff08;3&#xff09;逐出算法 二、企业级解决方案 &#xff08;1&#xff09;缓存预热 &#xff08;2&#xff09;缓存雪崩 &…

【Spring面试】八、事务相关

文章目录 Q1、事务的四大特性是什么&#xff1f;Q2、Spring支持的事务管理类型有哪些&#xff1f;Spring事务实现方式有哪些&#xff1f;Q3、说一下Spring的事务传播行为Q4、说一下Spring的事务隔离Q5、Spring事务的实现原理Q6、Spring事务传播行为的实现原理是什么&#xff1f…

神经网络 07(正则化)

一、正则化 在设计机器学习算法时不仅要求在训练集上误差小&#xff0c;而且希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小测试误差&#xff0c;这些策略被统称为正则化。因为神经网络的强大的表示能力经常遇到过拟合&#xff0c;所以需要使用不同形式的…

第4章_freeRTOS入门与工程实践之开发板使用

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

Charles的Map Remote功能

1、charles的Map Remote功能&#xff08;指定的网络请求重定向到另一个网址&#xff09;&#xff0c;说白了就是你本来要请求A接口拿数据&#xff0c;重定向后&#xff0c;你实际请求的是B接口&#xff0c;拿到的是B接口返回的数据。 入口Tools->Map Remote 本次测试过程中…