教你php利用redis实现消息队列解析
2020-10-28 15:26
393 查看
php+redis消息队列是php+mysql性能不足时的一个中间间处理方案。通过这个中间的处理,保证的数据的可用性和准确性。用于服务器瞬间请求大,数据库压力大的情况。如并发量大导致的超卖、并发量大导致的数据重复情况。
流程:php接受请求和数据 -> php把数据写入redis队列中(入队) -> shell定时调用php读取队列数据写入mysql(出队)
实现代码:
入队:inqueue.php
<?php $redis = new redis(); $redis->connect('127.0.0.1',6379); $redis -> select('1'); $redis->auth(''); $data = [a,b,c,d,e,f,g,h]; //这里可以是get或post请求过来的数据 $data = json_encode($data); $in = $redis->rpush('queue',$data); if($in){ echo "入队成功"; }
出队:outqueue.php
#!/usr/bin/php <?php $redis = new redis(); $redis->connect('127.0.0.1',6379); $redis -> select('1'); $redis->auth(''); $value = $redis->lpop('queue'); $value = json_decode($value,true);
shell process.sh:定时调用outqueue.php脚本
#进行每分钟调用一次 * * * * * /usr/local/nginx/html/process.sh #!/bin/bash #file_name : process.sh #author : zuoping php /usr/local/nginx/html/outqueue.php
如果每分钟调用一次频率不够,可以执行多次调用脚本,如:
#!/bin/bash #file_name : process.sh #author : zuoping php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php php /usr/local/nginx/html/outqueue.php #这样就一分钟调用了多次了。
查看队列中的当前数据:
<?php $redis = new redis(); $redis->connect('127.0.0.1',6379); $redis -> select('1'); $redis->auth(''); $list = $redis->lrange('queue',0,-1); var_dump($list);
以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取
相关文章推荐
- Redis集群环境搭建实践
- 基于redis的分布式锁详解
- 详解,Redis 哨兵(Sentinel)工作原理,实现及哨兵运维
- SpringBoot整合Redisson实战(通过redisson-spring-boot-starter)
- Redis 字典结构细谈
- SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期
- spring-boot-route(十二)整合redis做为缓存
- 从零开始手写缓存框架 redis(13)HashMap 源码原理详解
- 从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现
- Redis分布式锁—Redisson+RLock可重入锁实现篇
- 基于Redis实现在线游戏积分排行榜
- redis命令和RedisTemplate操作对应表
- 突然挂了!Redis的缓存都还在内存中,这下完了
- Redis的使用(二)—— Redis Desktop Manager 的安装与使用
- Redis的使用(一) —— 安装 Redis 与基本使用
- 论程序的健壮性——就看Redis
- laravel中Redis队列监听中断的分析
- python操作redis数据库的三种方法
- Redis源码笔记--服务器日志和函数可变参数处理server.c
- Redis事务详解,吃透数据库没你想的那么难