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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
Smarty模板配置实例简析
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
VOLVO车载收音机
2021/03/02 无线电
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python区分不同数据类型的方法
2019/10/14 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
行政助理的职责
2013/11/14 职场文书
人事科岗位职责范本
2014/03/02 职场文书
求职自荐信怎么写
2014/03/06 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL