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 相关文章推荐
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
微信公众平台DEMO(PHP)
May 04 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
js 字符串操作函数
2009/07/25 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
Angular排序实例详解
2017/06/28 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
js实现select下拉框选择
2020/01/11 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Python FFT合成波形的实例
2019/12/04 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
网站编辑求职信
2013/10/17 职场文书
纠纷协议书
2014/04/16 职场文书
公司担保书范文
2014/05/21 职场文书
任命书模板
2014/06/04 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
logback如何自定义日志存储
2021/08/30 Java/Android