一些基于用户创造内容的应用中(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消息队列发布微博相关推荐

  1. PHP下使用Redis消息队列发布微博(复制)

    phpRedisAdmin :github地址  图形化管理界面 git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git cd ph ...

  2. 微博群发私信 php,PHP下使用Redis消息队列发布微博

    phpRedisAdmin :github地址  图形化管理界面 git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git cd ph ...

  3. Redis应用实践-使用消息队列发布微博

    使用消息队列发布微博 有时候我们的应用中(如:微博)会出现这样的情况,一秒钟有很多用户同时发布消息.这个时候数据库Mysql可能会出现"too many connections". ...

  4. 调试笔记 — Redis 消息队列发布信息被消费者重复订阅多次牵扯到的 Tomcat 配置问题 [#00001]

    最近在项目中发现了一个奇葩的 BUG ,当用户调用后台时,后台向消息队列中发布一条消息,这条消息会被监听器(消费者)监听到,有趣的事情就在这里,此时由于只发送了一条消息,照理说监听器应该只会触发一次, ...

  5. Redis应用——使用消息队列发布微博

    在一些用户创造内容的应用中(如:SNS.微博),可能出现1秒有上万个用户同时发布消息的情况,此时如果只只用MySQL数据库,很可能出现"too many connections"的 ...

  6. Java实现redis消息队列发布/订阅模式

    最近在一个老项目中需要用消息队列,本来想着用卡夫卡,但是试了几个版本之后发现jdk和卡夫卡版本一直对不上,最后选择用redis来实现消息队列的发布/订阅模式.感谢这位大佬的博客给了我很多的帮助,htt ...

  7. php mysql redis mq_PHP基于Redis消息队列实现发布微博的方法

    本文实例讲述了PHP基于Redis消息队列实现发布微博的方法.分享给大家供大家参考,具体如下: phpRedisAdmin :github地址  图形化管理界面 git clone [url]http ...

  8. 微博群发私信 php,用PHP基于Redis消息队列实现发布微博的方法

    用PHP基于Redis消息队列实现发布微博的方法 PHP基于Redis消息队列实现发布微博的方法,结合实例形式分析了php+redis数据库的安装.连接.读取.插入等相关操作技巧,需要的朋友可以参考下 ...

  9. 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)

    前言: 本文基于jedis 2.9.0.jar.commons-pool2-2.4.2.jar以及json-20160810.jar 其中jedis连接池需要依赖commons-pool2包,json ...

最新文章

  1. 史上最全的长读长数据校错方法大比拼
  2. 电脑桌面便签_在电脑桌面使用敬业签怎么操作退出团队便签?
  3. 数据库设计笔记——概述(一)
  4. python数据分析开发环境_在MAC上搭建python数据分析开发环境
  5. c++ cstring 转换 char_Java基本数据类型的介绍及其转换(内附字符串与多种数据之间的转换)...
  6. java取余数的函数_左神算法基础:哈希函数和哈希表
  7. 垃圾回收算法与实现系列-锁在Java虚拟机中的实现和优化
  8. angularjs ui-router 路由简介
  9. 蓝桥杯 ADV-12 算法提高 计算时间
  10. Excel VBA 删除 表格中的图片
  11. LPC1788入门手记
  12. Python制作一个简单的图片文字提取+PDF转WORD的软件
  13. 2048游戏(C语言)
  14. 《2019-2020中国开发者调查报告》发布了!
  15. Data Vault初探(十) —— 星型模型向Data Vault模型转化
  16. Dango 之认证组件Auth模块
  17. 百度也能直播带货!12小时——“慢行”才能持久
  18. [bzoj3698]XWW的难题——有上下界的最大流
  19. 实验四 数据查询——简单查询 Sql Server数据库实验
  20. @font-face用法超详细讲解

热门文章

  1. 小米4x性能服务器图片介绍,红米4x怎么样 红米4x配置参数介绍【详解】
  2. 如何学习python量化交易接口的搭建?
  3. M-JPEG和MPEG-4的区别 M-JPEG VS MPEG
  4. 2023最新acme自动申请ssl证书-HTTPS证书
  5. 数据库--思维导向图
  6. Nginx 日志分析
  7. mysql 8.0.23 安装配置方法
  8. you-get使用命令
  9. BZOJ 2599: [IOI2011]Race 点分治题解
  10. java 第四章 面向对象(下)继承和多态