PHP中怎么利用Redis 实现消息队列
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇文章给大家分享的是有关PHP中怎么利用Redis 实现消息队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Redis做消息队列的好
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
gis数据库添加cad图
linux阿帕奇服务器拒绝连接
java 从页面到数据库
国家网络安全宣传周手抄报大学
教育软件开发学校
绝地求生国际服哪个服务器匹配快
上海快享网络技术
湖北安卓软件开发正规平台
嵌入式软件开发工程师想创业
软件开发干了10年
网络安全保护app哪个好
网络安全支付风险提示
教师维护网络安全的重要意义
jsp 查询 数据库
加强网络安全及治理
移动网络安全视频
宁波商城软件开发外包公司有哪些
软件开发企业如何账务处理
服务器硬件组成
平台服务器地址
java 从页面到数据库
中国联通网络安全清风队
工作网络安全
数据库嵌套查询规则
山东阿帕网络技术怎么样
数据库连接失败ora12170
奉贤区项目数据库服务有哪些
宽盛网络技术有限公司电话
财务系统软件开发
中国网络安全防护中心