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 相关文章推荐
PHP默认安装产生系统漏洞
Oct 09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
php的一些小问题
Jul 03 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
Dec 15 PHP
PHP实现权限管理功能示例
Sep 22 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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闭包函数详解
2016/02/13 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Python通过format函数格式化显示值
2020/10/17 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
党员活动日总结
2014/05/05 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
驻村工作简报
2015/07/20 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
基于Python实现一个春节倒计时脚本
2022/01/22 Python