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 相关文章推荐
一个ftp类(ini.php)
Oct 09 PHP
工厂模式在Zend Framework中应用介绍
Jul 10 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
php7 安装yar 生成docker镜像
May 09 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
php将xml转化对象的实例详解
Nov 17 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
模仿OSO的论坛(五)
2006/10/09 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
基python实现多线程网页爬虫
2015/09/06 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
Django项目中用JS实现加载子页面并传值的方法
2018/05/28 Python
python3.5安装python3-tk详解
2019/04/26 Python
python实现大文件分割与合并
2019/07/22 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
中专生职业生涯规划书范文
2014/01/10 职场文书
暑假家长评语大全
2014/04/17 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书