首頁  >  文章  >  後端開發  >  php結合redis實現高並發下發文、發微博的方法

php結合redis實現高並發下發文、發微博的方法

墨辰丷
墨辰丷原創
2018-05-29 15:10:091179瀏覽

這篇文章主要介紹php結合redis實現高並發下發文、發微博的方法,有興趣的朋友參考下,希望對大家有幫助。

發文、發微博、按讚、留言等這些操作很頻繁的動作如果並發量小,直接入庫是最簡單的

但是並發量一大,資料庫肯定扛不住,這時可採取延遲發布:先將發布動作保存在隊列裡,後台進程循環獲取再入庫

#模擬發布微博先進入redis隊列

weibo_redis.php


<?php
//此处需要安装phpredis扩展
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379);
$redis->auth("php001");
//连接redis
$web_info= array(
	&#39;uid&#39; => $_REQUEST[uid], //发布者id
	&#39;username&#39; => $_REQUEST[username],//发布者用户名
	&#39;content&#39; =>$_REQUEST[content],//微博内容
);


//将数组转成json来存储
$list = json_encode($web_info);
//lpush向KEY对应的头部添加一个字符串元素
$redis->lpush(&#39;weibo_lists&#39;,$list);
$redis->close();
var_dump($list);
?>


模擬後台程序從redis佇列取得微博

#Pdodb.class.php


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


#

<?php
require_once &#39;Pdodb.class.php&#39;;
set_time_limit(0); // 取消脚本运行时间的超时上限


$pdo = new Pdodb();
$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379);


while (true) {
	//返回的列表的大小。如果列表不存在或为空,该命令返回0。如果该键不是列表,该命令返回false
	if($redis -> lsize(&#39;weibo_lists&#39;)){
		//从LIST头部删除并返回删除数据
		$info = $redis->rpop(&#39;weibo_lists&#39;);
		$info = json_decode($info);
		$pdo->post($info->uid,$info->username,$info->content);
	}
	$redis->close();
	sleep(10);//延时10秒
}


##weibo_mysql.php

rrreee


後台執行weibo_mysql.php

nohup php / var/www/html/big/weibo_mysql.php &以上就是本文的全部內容,希望對大家的學習有幫助。

相關推薦:

phpredis 組裝

PHP Redis,phpredis

php 安裝redis擴展,phpredis擴展

###########################

以上是php結合redis實現高並發下發文、發微博的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn