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 - Html Transfer Code
Oct 09 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP下几种删除目录的方法总结
Aug 19 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
php创建多级目录的方法
Mar 24 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
php数组遍历类与用法示例
May 24 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使用qr生成二维码的示例分享
2014/01/20 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
Python编程中的文件操作攻略
2015/10/16 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python pickle模块实现对象序列化
2019/11/22 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
献爱心大型公益活动策划方案
2014/09/15 职场文书
医院护士工作检讨书
2014/10/26 职场文书
世界红十字日活动总结
2015/02/10 职场文书
庆七一主持词
2015/06/29 职场文书