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


Posted in PHP onDecember 15, 2016

发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的

但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库

模拟发布微博先进入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();
		}
	}
}

weibo_mysql.php

<?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高并发下发帖、发微博的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Cakephp 执行主要流程
Mar 24 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
php文件读取方法实例分析
Jun 20 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
PHP检测接口Traversable用法详解
Dec 29 PHP
PDO::lastInsertId讲解
Jan 29 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 #PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 #PHP
PHP接口并发测试的方法(推荐)
Dec 15 #PHP
浅谈PHP的反射机制
Dec 15 #PHP
php 三元运算符实例详细介绍
Dec 15 #PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 #PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 #PHP
You might like
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
three.js实现圆柱体
2018/12/30 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Javascript实现打鼓效果
2021/01/29 Javascript
python实现udp数据报传输的方法
2014/09/26 Python
python 远程统计文件代码分享
2015/05/14 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python通过正则库爬取淘宝商品信息代码实例
2020/03/02 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
五心教育心得体会
2014/09/04 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
python playwright之元素定位示例详解
2022/07/23 Python