千家信息网

PHP中怎么利用Redis 实现消息队列

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关PHP中怎么利用Redis 实现消息队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Redis做消息队列的好
千家信息网最后更新 2025年12月02日PHP中怎么利用Redis 实现消息队列

本篇文章给大家分享的是有关PHP中怎么利用Redis 实现消息队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Redis做消息队列的好处在于它的轻量级,高并发,延迟敏感,应用场景有 即时数据分析、秒杀计数器、缓存等

Redis做消息队列待解决的问题:

1、消息的可靠性: 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理。生产者只管向队列中插入数据,不管消费者是否成功消费。

2、消费者挂掉消息不会丢失,但是需要重新触发一下消费者,才能够继续消费消息。

代码如下:

lib.php 是工具文件,里面有数据库的连接、Redis的连接:

connect($host, $port)){        die("Redis连接失败:IP或端口有误");    }    if(!empty($password) && !$redis->auth($password)){        die("Redis连接失败:密码错误");    }    if($database){        $redis->select($database);    }    // work中 subscribe 如果一段时间没有接到消息,就会停掉然后停掉,所以加这个语句让其永不超时    $redis->setOption(Redis::OPT_READ_TIMEOUT, -1);    return $redis;} /** * 打印消息日志 * * @param $msg */function stdout($msg=null){    $msg = '['.date('Y-m-d H:i:s').']'.$msg.chr(10);;    fwrite(STDOUT, $msg);}

register.php 是消息发布者,注释的是将消息存入数据库部分的代码。

首先想消息存入 register_users 队列中,存入的 key是register_users;value是一个list,消息全部存入其中。用 redis-cli 查看数据的命令是:

LRANGE register_users 0 -1

register.php:

error);// }$redis = getRedis();// 添加消息$result = $redis->lpush('register_users', json_encode(array('name'=>$name, 'mobile'=>$mobile), JSON_UNESCAPED_UNICODE));if($result === false){    mysqli_rollback($connection);    die("添加消息队列失败");}// 发布消息$redis->publish('register_success', 'ok');// 所有操作完成后提交事务// mysqli_commit($connection);// $connection->close();$redis->close();

work.php 做为消息的消费者

subscribe(['register_success'], function ($instance, $channelName, $message) {    if($channelName == "register_success" && $message = "ok") {        $redis = getRedis();        while($redis->lsize("register_users")>0) {            $arr = $redis->brPop(['register_users'], 20);            if(count($arr)) {                $userInfo = json_decode($arr[1], true);                stdout("新注册用户信息:");                stdout("姓名:".$userInfo['name']);                stdout("手机号:".$userInfo['mobile']);                stdout();                sleep(3);            }        }    }});

register.php将消息放入redis 的 register_users队列中,然后再使用 publish 将 register_success 消息发不出去。work.php 使用 subscribe 订阅register_success 的消息。接收到 register_success 消息之后,读取 register_users 的消息进行处理。

以上就是PHP中怎么利用Redis 实现消息队列,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

消息 消费 队列 数据 消费者 代码 数据库 更多 知识 篇文章 部分 处理 实用 事务 发布者 可靠性 命令 场景 好处 姓名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 石景山区管理软件开发质量推荐 我的世界服务器里面的东西在哪里 深圳软件开发公司名字 30岁还能做软件开发吗 软件开发业是生产服务业吗 计算机网络技术能否报名士官 服务器上的安全数据没有 HSE管理用于软件开发 上海迎喜互联网科技有限公司 网络安全与信息安全技术试题 怎样建立数据库服务器 数据库产品年终回顾 网络安全法两次公开 服务器控件的利弊 软件开发任职资格测评 服务器分项报价表模板 计算机及网络技术运维工程师 修复sql数据库 邮政寄递四大数据库是指什么 杨浦区网络营销软件开发管理系统 玩的游戏的服务器忘记了怎么办 服务器第三个网口怎么用 计算机网络关于网络安全的ppt 济南思新网络技术有限公司 魔兽怀旧那个服务器人员多还均衡 服务器机柜底座 网络技术就业方向及前景 什么是数据库中的关系模式 软件开发往哪个方向做 鱼人服务器联盟部落比例
0