Comment utiliser PHP combiné avec Redis pour obtenir une concurrence élevée dans la publication et Weibo

墨辰丷
Libérer: 2023-03-28 11:06:02
original
1209 Les gens l'ont consulté

Cet article présente principalement la méthode de combinaison de PHP avec Redis pour obtenir une simultanéité élevée dans la publication et les amis Weibo intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Pour les opérations fréquentes telles que publier, publier sur Weibo, aimer et commenter, etc., si le degré de concurrence est faible, il est plus simple de les stocker directement dans la base de données

Mais si le niveau de concurrence est important, la base de données le gérera certainement. À ce stade, vous pouvez retarder la publication : enregistrez d'abord l'action de publication dans la file d'attente, et le processus en arrière-plan boucle pour l'obtenir, puis la stocker dans la base de données

.

Simulez la publication Weibo et entrez d'abord dans la file d'attente 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);
?>
Copier après la connexion


Simulez le processus en arrière-plan pour extraire Weibo de la file d'attente 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();
		}
	}
}
Copier après la connexion


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秒
}
Copier après la connexion


Exécution en arrière-plan de weibo_mysql.php

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

Le ci-dessus est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

assembly phpredis

PHP Redis, phpredis

php installer l'extension redis, extension phpredis


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal