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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
windows下开发并编译PHP扩展的方法
Mar 18 PHP
基于php iconv函数的使用详解
Jun 09 PHP
CURL状态码列表(详细)
Jun 27 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 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随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
document.getElementById介绍
2011/09/13 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
浅谈js闭包理解
2019/04/01 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python重新引入被覆盖的自带function
2014/07/16 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
Python实现简单http服务器
2018/04/12 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
董事长职责范文
2013/11/08 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
教师考察材料范文
2014/06/03 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python