网站优化软件,虚拟主机空间免费,wordpress微博头条,最近热点新闻素材Redis 的发布-订阅模型是一种消息通信模式#xff0c;它允许客户端之间通过特定的频道进行通信。在这种模型中#xff0c;有些客户端负责发布消息#xff08;发布者#xff09;#xff0c;而其他客户端则订阅它们感兴趣的频道并接收这些消息#xff08;订阅者#xff09…Redis 的发布-订阅模型是一种消息通信模式它允许客户端之间通过特定的频道进行通信。在这种模型中有些客户端负责发布消息发布者而其他客户端则订阅它们感兴趣的频道并接收这些消息订阅者。
以下是 Redis 发布订阅的基本操作
SUBSCRIBE订阅者使用此命令订阅一个或多个频道的消息。PUBLISH发布者使用此命令向指定的频道发送消息。UNSUBSCRIBE订阅者使用此命令取消订阅一个或多个频道的消息。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();}//订阅多个频道//apipublic function api(){$this-redis-publish(sixStar:api,api平台开发专栏);}//swoolepublic 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 dqh163.com
// ----------------------------------------------------------------------// ----------------------------------------------------------------------
// | 控制台配置
// ----------------------------------------------------------------------
return [// 指令定义commands [hello app\command\Subscribe,],
];?php
/*** 自定义指令 - tpredis实现发布订阅和消息推送*/
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 发布消息的控制器方法 就能收到一条订阅