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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
在php的yii2框架中整合hbase库的方法
Sep 20 PHP
PDO::prepare讲解
Jan 29 PHP
解决Laravel5.5下的toArray问题
Oct 15 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
python中实现php的var_dump函数功能
2015/01/21 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
python之拟合的实现
2019/07/19 Python
pygame实现打字游戏
2021/02/19 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
为什么称python为胶水语言
2020/06/16 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
Python连接mysql方法及常用参数
2020/09/01 Python
思想政治教育专业个人求职信范文
2013/12/20 职场文书
技校个人求职信范文
2014/01/25 职场文书
美术教师岗位职责
2014/03/18 职场文书
环保建议书400字
2014/05/14 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书