Redis消息队列发布微博
一些基于用户创造内容的应用中(SNS,微博),很容易出现一秒钟上万个用户同时发布消息的情况。这个时候,很容易出现MySQL的“too many connections”的情况,增大MySQL的max_connections只是治标不治本的方法,这个时候,我们就可以考虑使用reids的list来实现消息队列
使用redis的list类型作为消息队列,把用户发布的消息暂时存储在消息队列中,接着使用一个cron程序将消息队列中的消息插入mysql,这个方法,可以有效的降低MySQL的并发量。
下面是直接发布微博的接口:
<?php$uid = get_uid();$content = get_content();$timestamp = time();$weibo = new Weibo();//创建weibo对象$weibo->post($uid,$content,$timestamp);
?>
上面的例子中,微博对象的post方法直接将微博写入MySQL,这样会存在一定的并发数,下面我们使用redis的list类型来实现微博发布。
第一步:将微博写入redis中
<?php$redis = new Redis('127.0.0.1',6379);$redis->connect();$weibo_info = array('uid'=>$get_uid,'content'=>get_content(),'timestamp'=>time());$redis->lpush('weibo_list',json_encode($weibo_info));$redis->close();
?>
第二步:编写cron程序,来把redis的微博信息插入到MySQL:
<?php$redis = new Redis('127.0.0.1',6379);$redis->connect();$weibo = new Weibo();while(TRUE){if($redis->lsize('weibo_list')>0){$info = $redis->rpop('weibo_list');$info = json_decode($info);$weibo->post($info->uid,$info->content,$info->timestamp);}else{sleep(1);//如果队列中没有任务的时候,睡眠1s,让出cpu给其他进程}}$redis->close();
?>
在cron程序中,先使用redis对象的rpop方法从weibo_list列表中取得一条微博信息,然后解码调用weibo对象的post方法插入到MySQL中。
但是使用消息队列有一个缺点:“延时”。为了将延时降到最低,运行多个cron程序同时把消息队列中的数据插入到MySQL中。使用消息队列的好处就是扩展性好,当一台redis服务器不能应付大量并发时,使用“一致性hash算法”把并发分发到不同redis服务器。
Redis消息队列发布微博相关推荐
- PHP下使用Redis消息队列发布微博(复制)
phpRedisAdmin :github地址 图形化管理界面 git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git cd ph ...
- 微博群发私信 php,PHP下使用Redis消息队列发布微博
phpRedisAdmin :github地址 图形化管理界面 git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git cd ph ...
- Redis应用实践-使用消息队列发布微博
使用消息队列发布微博 有时候我们的应用中(如:微博)会出现这样的情况,一秒钟有很多用户同时发布消息.这个时候数据库Mysql可能会出现"too many connections". ...
- 调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]
最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次, ...
- Redis应用——使用消息队列发布微博
在一些用户创造内容的应用中(如:SNS.微博),可能出现1秒有上万个用户同时发布消息的情况,此时如果只只用MySQL数据库,很可能出现"too many connections"的 ...
- Java实现redis消息队列发布/订阅模式
最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...
- php mysql redis mq_PHP基于Redis消息队列实现发布微博的方法
本文实例讲述了PHP基于Redis消息队列实现发布微博的方法.分享给大家供大家参考,具体如下: phpRedisAdmin :github地址 图形化管理界面 git clone [url]http ...
- 微博群发私信 php,用PHP基于Redis消息队列实现发布微博的方法
用PHP基于Redis消息队列实现发布微博的方法 PHP基于Redis消息队列实现发布微博的方法,结合实例形式分析了php+redis数据库的安装.连接.读取.插入等相关操作技巧,需要的朋友可以参考下 ...
- 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)
前言: 本文基于jedis 2.9.0.jar.commons-pool2-2.4.2.jar以及json-20160810.jar 其中jedis连接池需要依赖commons-pool2包,json ...
最新文章
- 史上最全的长读长数据校错方法大比拼
- 电脑桌面便签_在电脑桌面使用敬业签怎么操作退出团队便签?
- 数据库设计笔记——概述(一)
- python数据分析开发环境_在MAC上搭建python数据分析开发环境
- c++ cstring 转换 char_Java基本数据类型的介绍及其转换(内附字符串与多种数据之间的转换)...
- java取余数的函数_左神算法基础:哈希函数和哈希表
- 垃圾回收算法与实现系列-锁在Java虚拟机中的实现和优化
- angularjs ui-router 路由简介
- 蓝桥杯 ADV-12 算法提高 计算时间
- Excel VBA 删除 表格中的图片
- LPC1788入门手记
- Python制作一个简单的图片文字提取+PDF转WORD的软件
- 2048游戏(C语言)
- 《2019-2020中国开发者调查报告》发布了!
- Data Vault初探(十) —— 星型模型向Data Vault模型转化
- Dango 之认证组件Auth模块
- 百度也能直播带货!12小时——“慢行”才能持久
- [bzoj3698]XWW的难题——有上下界的最大流
- 实验四 数据查询——简单查询 Sql Server数据库实验
- @font-face用法超详细讲解