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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
杏林同学录(五)
Oct 09 PHP
php中cookie的作用域
Mar 27 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
深入分析php之面向对象
May 15 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
PHP实现简单数字分页效果
Jul 26 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
PHP创建自己的Composer包方法
Apr 09 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 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脚本的10个技巧(1)
2006/10/09 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
浅析JS刷新框架中的其他页面 && JS刷新窗口方法汇总
2013/07/08 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
Python lambda和Python def区别分析
2014/11/30 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python中property函数用法实例分析
2018/06/04 Python
详解Python中的正则表达式
2018/07/08 Python
详解Python中的路径问题
2020/09/02 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
个人查摆剖析材料
2014/10/04 职场文书
党的群众路线查摆剖析材料
2014/10/10 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang