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 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
php auth_http类库进行身份效验
Mar 19 PHP
php 小乘法表实现代码
Jul 16 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
Apr 08 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
php+js实现点赞功能的示例详解
Aug 07 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实现验证码功能
2006/10/09 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
javascript比较文档位置
2008/04/08 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
详解Python的Django框架中的模版继承
2015/07/16 Python
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
python实现电子产品商店
2019/02/26 Python
Python实现账号密码输错三次即锁定功能简单示例
2019/03/29 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
大学生毕业自荐信
2013/10/10 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2015入党个人自传范文
2015/06/26 职场文书