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网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
Dec 14 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
php计算税后工资的方法
Jul 28 PHP
yii2缓存Caching基本用法示例
Jul 18 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
PHP重定向的3种方式
2013/03/07 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
详解vuex的简单使用
2018/03/12 Javascript
React diff算法的实现示例
2018/04/20 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
深入理解Python装饰器
2016/07/27 Python
python配置grpc环境
2019/01/01 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
使用Python的turtle模块画国旗
2019/09/24 Python
django实现用户注册实例讲解
2019/10/30 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
计算s=f(f(-1.4))的值
2014/05/06 面试题
网络教育毕业生自我鉴定
2013/10/10 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
怎么写好自荐书
2014/03/02 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
清明节主题班会
2015/08/14 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书