這篇文章主要介紹php結合redis實現高並發下發文、發微博的方法,有興趣的朋友參考下,希望對大家有幫助。
發文、發微博、按讚、留言等這些操作很頻繁的動作如果並發量小,直接入庫是最簡單的
但是並發量一大,資料庫肯定扛不住,這時可採取延遲發布:先將發布動作保存在隊列裡,後台進程循環獲取再入庫
#模擬發布微博先進入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(); } } }
#
<?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,phpredis
php 安裝redis擴展,phpredis擴展
###########################以上是php結合redis實現高並發下發文、發微博的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!