php结合redis高并发下发帖、发微博的实现方法

2018-09-21 00:01

阅读:312

  发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的

  但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库

  模拟发布微博先进入redis队列

  weibo_redis.php

   <?php //此处需要安装phpredis扩展 $redis = new Redis(); $redis->connect(127.0.0.1, 6379); $redis->auth(php001); //连接redis $web_info= array( uid => $_REQUEST[uid], //发布者id username => $_REQUEST[username],//发布者用户名 content =>$_REQUEST[content],//微博内容 ); //将数组转成json来存储 $list = json_encode($web_info); //lpush向KEY对应的头部添加一个字符串元素 $redis->lpush(weibo_lists,$list); $redis->close(); var_dump($list); ?>

  模拟后台进程从redis队列获取微博

  Pdodb.class.php

   <?php class Pdodb{ public function post($uid=,$username=,$content=){ try{ $dsn = mysql:localhost;dbname=localhost;dbname=big; $db = new PDO($dsn,big,123456); $db->exec(SET NAMES UTF8); $sql =insert into ih_weibo(uid,username,content)values($uid,$username,$content); //echo $sql; $db->exec($sql); }catch(PDOException $e){ echo $e->getMessage(); } } }

  weibo_mysql.php

   <?php require_once Pdodb.class.php; set_time_limit(0); // 取消脚本运行时间的超时上限 $pdo = new Pdodb(); $redis = new Redis(); $redis->connect(127.0.0.1, 6379); while (true) { //返回的列表的大小。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回false if($redis -> lsize(weibo_lists)){ //从LIST头部删除并返回删除数据 $info = $redis->rpop(weibo_lists); $info = json_decode($info); $pdo->post($info->uid,$info->username,$info->content); } $redis->close(); sleep(10);//延时10秒 }

  后台执行weibo_mysql.php

  nohup php /var/

  以上这篇php结合redis高并发下发帖、发微博的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。


评论


亲,登录后才可以留言!