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 相关文章推荐
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php链表用法实例分析
Jul 09 PHP
php 中的closure用法详解
Jun 12 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
如何在PHP中读写文件
Sep 07 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
Vue.directive使用注意(小结)
2018/08/31 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
Python如何重新加载模块
2020/07/29 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
python制作抽奖程序代码详解
2021/01/15 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
《赵州桥》教学反思
2014/02/17 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
六五普法宣传标语
2014/10/06 职场文书