Home  >  Article  >  Backend Development  >  How to use PHP combined with redis to achieve high concurrency in posting and Weibo

How to use PHP combined with redis to achieve high concurrency in posting and Weibo

墨辰丷
墨辰丷Original
2018-05-29 15:10:091180browse

This article mainly introduces the method of combining PHP with redis to achieve high concurrency in posting and Weibo. Friends who are interested can refer to it. I hope it will be helpful to everyone.

Posting, Weibo, Likes, Comments, etc. are very frequent actions. If the amount of concurrency is small, it is easiest to directly store them in the database.

But if the amount of concurrency is large, the database will definitely carry it. If you can't help it, you can delay publishing: first save the publishing action in the queue, and the background process will loop to obtain it and then store it in the database.

Simulate publishing Weibo and enter the redis queue first

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);
?>


Simulate the background process to obtain Weibo from the redis queue

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();
		}
	}
}


weibo_mysql.php

##
<?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秒
}


Background execution weibo_mysql.php

nohup php / var/www/html/big/weibo_mysql.php &

The above is the entire content of this article, I hope it will be helpful to everyone’s study.

Related recommendations:

phpredis assembly


PHP Redis, phpredis


php Install redis extension, phpredis extension



##

The above is the detailed content of How to use PHP combined with redis to achieve high concurrency in posting and Weibo. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn