php 基于redis的发布订阅工具类
<?php class RedisPubSub { private $redis; private $config; private $subscribed = false; public function __construct($config = []) { $this->config = array_merge([ 'host' => '127.0.0.1', 'port' => 6379, 'password' => null, 'database' => 0, 'timeout' => 0 ], $config); $this->connect(); } private function connect() { $this->redis = new Redis(); $this->redis->connect( $this->config['host'], $this->config['port'], $this->config['timeout'] ); if ($this->config['password']) { $this->redis->auth($this->config['password']); } $this->redis->select($this->config['database']); } public function publish($channel, $message) { return $this->redis->publish($channel, json_encode($message)); } public function subscribe($channels, $callback) { if (!is_array($channels)) { $channels = [$channels]; } $this->redis->subscribe($channels, function ($redis, $channel, $message) use ($callback) { $callback($channel, json_decode($message, true)); }); } public function psubscribe($patterns, $callback) { if (!is_array($patterns)) { $patterns = [$patterns]; } $this->redis->psubscribe($patterns, function ($redis, $pattern, $channel, $message) use ($callback) { $callback($pattern, $channel, json_decode($message, true)); }); } public function unsubscribe() { if ($this->subscribed) { $this->redis->unsubscribe(); } } public function __destruct() { $this->unsubscribe(); $this->redis->close(); } }
使用方法
// 发布消息
$pubsub = new RedisPubSub();
$pubsub->publish('news', ['title' => 'Breaking News', 'content' => 'PHP 8.2 released!']);
// 订阅消息(通常在单独的脚本或进程中运行)
$pubsub = new RedisPubSub();
$pubsub->subscribe('news', function($channel, $message) {
echo "Received on $channel: ";
print_r($message);
});
// 使用模式订阅
$pubsub->psubscribe('news.*', function($pattern, $channel, $message) {
echo "Pattern [$pattern] received on $channel: ";
print_r($message);
});
注意事项:
- 订阅操作是阻塞的,建议在单独的进程/线程中运行
- 需要安装 phpredis 扩展:
pecl install redis
- 长时间运行的订阅进程建议使用 CLI 模式执行
- 可以通过配置参数调整序列化方式(JSON/serialize等)
- 生产环境建议添加错误处理和重连机制
滴水成冰,世间不存在毫无意义的付出,时间终会给你答案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2023-03-07 hashid,短链接项目算法神器