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中养成7个面向对象的好习惯
Jan 28 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
Feb 22 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php密码生成类实例
Sep 24 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
php单一接口的实现方法
Jun 20 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
PHP中的异常处理机制深入讲解
Nov 10 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
调频问题解答
2021/03/01 无线电
很让人受教的 提高php代码质量36计
2012/09/05 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
高二美术教学反思
2014/01/14 职场文书
普通党员个人整改措施
2014/10/27 职场文书
运动会5000米加油稿
2015/07/21 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
交通安全教育主题班会
2015/08/12 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
详解python字符串驻留技术
2021/05/21 Python
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android