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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
深入php之规范编程命名小结
2013/05/15 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
为你总结一些php系统类函数
2015/10/21 PHP
单元选择合并变色示例代码
2014/05/26 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
提升Python程序运行效率的6个方法
2015/03/31 Python
自己使用总结Python程序代码片段
2015/06/02 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python切片索引用法示例
2018/05/15 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
某公司.Net方向面试题
2014/04/24 面试题
国贸专业个人求职信范文
2014/01/08 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL