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中Date获取时间不正确怎么办
Jun 05 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
php输出xml必须header的解决方法
Oct 17 PHP
smarty内置函数foreach用法实例
Jan 22 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
php实现上传图片文件代码
Jul 19 PHP
Yii rules常用规则示例
Mar 15 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
php快速导入大量数据的实例方法
Sep 23 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
phpmyadmin操作流程
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
js获取url传值的方法
2015/12/18 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
简单上手Python中装饰器的使用
2015/07/12 Python
python开发之文件操作用法实例
2015/11/13 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
python 实现性别识别
2020/11/21 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
js实现弹框效果
2021/03/24 Javascript
养殖行业的创业计划书
2014/01/05 职场文书
上班看电影检讨书
2014/02/12 职场文书
材料加工工程求职信
2014/02/19 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
PyTorch的Debug指南
2021/05/07 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis