php结合redis高并发下发帖、发微博的实现方法
2016-12-15 14:57
891 查看
发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的
但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库
模拟发布微博先进入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/www/html/big/weibo_mysql.php &
以上这篇php结合redis高并发下发帖、发微博的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- 一个关于if else容易迷惑的问题
- Pedis: NoSQL data store using the SEASTAR framework, compatible with Redis
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- redis安装问题小结
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- spring中Redis的集群简单实现
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- Laravel5.3 表单验证中文报错提示语言包
- 10 件在 PHP 7 中不要做的事情
- 写程序的时候应该如何思考?
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的