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文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
PHP 事务处理数据实现代码
May 13 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php开启openssl的方法
May 15 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php连接oracle数据库的核心步骤
May 26 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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中一个完整表单处理实现代码
2011/11/10 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
Jquery插件编写简明教程
2014/03/25 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
python创建进程fork用法
2015/06/04 Python
Python 错误和异常代码详解
2018/01/29 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python 提取文件指定列的方法示例
2019/08/07 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
python SOCKET编程基础入门
2021/02/27 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
前台领班岗位职责
2013/12/04 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
银行开业庆典方案
2014/02/06 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
嘉宾邀请函
2015/01/31 职场文书
整改通知书
2015/04/20 职场文书
电影复兴之路观后感
2015/06/02 职场文书
七年级作文之游记
2019/12/11 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python