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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
php的mssql数据库连接类实例
Nov 28 PHP
php中fsockopen用法实例
Jan 05 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
php多重接口的实现方法
Jun 20 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
php中错误处理操作实例分析
Aug 23 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下目前为目最全的CURL中文说明
2010/08/01 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
使用python进行广告点击率的预测的实现
2019/07/04 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
上班旷工检讨书
2015/08/15 职场文书
2016年安全月活动总结
2016/04/06 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python