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获取远程图片并把它保存到本地的代码
Apr 07 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 PHP
php生成微信红包数组的方法
Sep 05 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
深入解析koa之异步回调处理
2019/06/17 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
Python单链表的简单实现方法
2014/09/23 Python
python求列表交集的方法汇总
2014/11/10 Python
python常规方法实现数组的全排列
2015/03/17 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
网络安全方面的面试题
2016/01/07 面试题
30年同学聚会邀请函
2014/01/25 职场文书
水果超市创业计划书
2014/01/27 职场文书
母亲节演讲稿
2014/05/27 职场文书
2015选调生工作总结
2015/07/24 职场文书