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 相关文章推荐
配置支持SSI
Nov 25 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
Jan 20 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
php实现微信和支付宝支付的示例代码
Aug 11 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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字符串截取问题
2006/11/28 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
layui table数据修改的回显方法
2019/09/04 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
行政办公室岗位职责
2014/03/18 职场文书
初三学生个人自我评定
2014/04/06 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
赞美教师的句子
2019/09/02 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs