Rumah >pembangunan bahagian belakang >tutorial php >php结合redis实现高并发下发帖、发微博的方法

php结合redis实现高并发下发帖、发微博的方法

墨辰丷
墨辰丷asal
2018-05-29 15:10:091237semak imbas

本篇文章主要介绍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();
		}
	}
}


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


后台执行weibo_mysql.php

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

以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

phpredis 装配

PHP Redis,phpredis

php 安装redis扩展,phpredis扩展


Atas ialah kandungan terperinci php结合redis实现高并发下发帖、发微博的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn