PHP中怎么利用Redis 实现消息队列
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,本篇文章给大家分享的是有关PHP中怎么利用Redis 实现消息队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Redis做消息队列的好
千家信息网最后更新 2024年11月17日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安全错误
数据库的锁怎样保障安全
部门网络安全宣传周活动总结
管家婆服务器端口地址
易天网络技术开发有限公司
数据库被加工处理吗
软件开发社区平台
山石网科网络安全产品有什么
福建网络技术开发
linux 系统服务器版
web服务器是干嘛的
电脑怎样直连存储服务器
维护网络安全的途径有哪些
护苗网络安全课堂简报
新华互联网科技学校呼和浩特
基岩版服务器管理
网络安全宣传周 地铁几号线
网络安全维护软件产品
怎么给数据库中的表加密
贵州网络安全攻防
网络安全 技术 管理
通信网络安全法规与政策
深圳有信网络技术公司客服电话是
会员报单软件开发哪家好
6区登录和服务器断开
动物名片设计软件开发
数据库系统现状
河北手机软件开发在线咨询
软件开发时计入在建工程
网络安全文明对联
深圳时创互联网科技有限公司
大沥网络安全哪家好