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 相关文章推荐
Windows下安装Memcached的步骤说明
Apr 25 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php实现aes加密类分享
Feb 16 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
php单例模式示例分享
Feb 12 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
Yii框架连表查询操作示例
Sep 06 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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/01/13 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
Javascript window对象详解
2014/11/12 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
正规的求职信范文分享
2013/12/11 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
人力资源部岗位职责
2015/02/11 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android