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 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
php静态文件返回304技巧分享
Jan 06 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHPMailer发送邮件
2016/12/28 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python随机生成带特殊字符的密码
2016/03/02 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
银行求职推荐信范文
2013/11/30 职场文书
摄影助理岗位职责
2014/02/07 职场文书
卖车协议书
2014/04/21 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
个人作风建设自查报告
2014/10/22 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL