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用mysql数据库存储session的代码
Mar 05 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
PHP中用hash实现的数组
Jul 17 PHP
php mail to 配置详解
Jan 16 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
Aug 18 PHP
PHP魔术方法的使用示例
Jun 23 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
PHP实现权限管理功能示例
Sep 22 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
PHP中->和=>的含义及使用示例解析
Aug 06 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 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php中请求url的五种方法总结
2017/07/13 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
使用Python对Access读写操作
2017/03/30 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
远程研修随笔感言
2014/02/10 职场文书
火车的故事教学反思
2014/02/11 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
安全承诺书
2015/01/19 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript