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笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
php三维数组去重(示例代码)
Nov 26 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
May 14 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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
使用URL传输SESSION信息
2015/07/14 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python实现简易动态时钟
2018/11/19 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python使用Pygame绘制时钟
2020/11/29 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Ruby如何进行文件操作
2014/07/17 面试题
控制工程专业个人求职信
2013/09/25 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
大三学习计划书范文
2014/05/02 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers