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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
用 PHP5 轻松解析 XML
Dec 04 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
php基础教程
Aug 26 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 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
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
倒记时60刷新网页的js代码
2014/02/18 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
Prototype框架详解
2015/11/25 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python爬虫的工作原理
2017/03/05 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
智能室内花园:Click & Grow
2021/01/29 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
综合素质评价个性与发展自我评价
2015/03/06 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android