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 21 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
PHP url 加密解密函数代码
Aug 26 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
PHP中if和or运行效率对比
Dec 12 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 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实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP实现简单登录界面
2019/10/23 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
jquery等待效果示例
2014/05/01 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
js实现全选和全不选
2020/07/28 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
Python深入学习之内存管理
2014/08/31 Python
python paramiko模块学习分享
2017/08/23 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python requests库用法实例详解
2018/08/14 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
用python批量下载apk
2020/12/29 Python
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
电气工程师岗位职责
2014/01/01 职场文书
无故旷工检讨书
2014/01/26 职场文书
优秀求职信
2014/05/29 职场文书
幼师求职信
2014/06/23 职场文书
科学发展观演讲稿
2014/09/11 职场文书
文员岗位职责范本
2015/04/16 职场文书
安全教育第一课观后感
2015/06/17 职场文书
庆七一晚会主持词
2015/06/30 职场文书
获奖感言范文
2015/07/31 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
springboot中的pom文件 project报错问题
2022/01/18 Java/Android