PHP使用redis消息队列发布微博的方法示例


Posted in PHP onJune 22, 2017

本文实例讲述了PHP使用redis消息队列发布微博的方法。分享给大家供大家参考,具体如下:

在一些用户发布内容应用中,可能出现1秒上万个用户同时发布消息的情况,此时使用mysql可能会出现" too many connections"错误,当然把Mysql的max_connections参数设置为更大数,不过这是一个治标不治本的方法。而使用redis的消息队列,把用户发布的消息暂时存储在消息队列中,然后使用多个cron程序把消息队列中的数据插入到Mysql。这样就有效的降低了Mysql的高并发。具体实现原理如下:

现有微博发布接口:

$weibo = new Weibo();
$uid = $weibo->get_uid();
$content =$weibo->get_content;
$time = time();
$webi->post($uid,$content,$time);

此方法直接把微博内容写入Mysql。具体过程省略。

把消息写入到redis:

$redis = new Redis(localhost,6379);
$redis->connect();
$webiInfo = array('uid'=>get_uid(),'content'=>get_content(),'time'=>time());
$redis->lpush('weibo_list',json_encode($weiboInfo));
$redis->close();

从redis中取出数据:

while(true){
   if($redis->lsize('weibo_list') > 0){
     $info = $redis->rpop('weibo_list');
     $info = json_decode($info);
   }else{
     sleep(1);
   }
}
$weibo->post($info->uid,$info->content,$info->time);
//插入数据的时候可以用一次性插入多条数据的方法,避免循环插入,不停的循环插入可能会导致死锁问题。

提示:可以运行多个cron程序同时把消息队列的数据插入到Mysql中,当一台Redis服务器不能应付大量并发时,使用一致性Hash算法,把并发分发到不同的Redis服务器。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(4)
Oct 09 PHP
php foreach、while性能比较
Oct 15 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
Joomla开启SEF的方法
May 04 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
PHP7创建销毁session的实例方法
Feb 03 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 #PHP
PHP简单装饰器模式实现与用法示例
Jun 22 #PHP
PHP实现的简单适配器模式示例
Jun 22 #PHP
php smtp实现发送邮件功能
Jun 22 #PHP
php实现页面纯静态的实例代码
Jun 21 #PHP
详解php实现页面静态化原理
Jun 21 #PHP
PHP实现的观察者模式实例
Jun 21 #PHP
You might like
thinkPHP模型初始化实例分析
2015/12/03 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
Vue实现购物车功能
2017/04/27 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python中int与str互转方法
2018/07/02 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
总经理驾驶员岗位职责
2013/12/04 职场文书
家长通知书教师评语
2014/04/17 职场文书
老师对学生的评语
2014/04/18 职场文书
大学生演讲稿
2014/04/25 职场文书
社区义诊活动总结
2014/04/30 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
2019财务转正述职报告
2019/06/27 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js