什么是消息队列,百度百科说,···消息队列····是在消息的传输过程中保存消息的容器。

  看着网上林林总总的文章,都说是为了应对高并发,处理数据量超级大的一种数据容器,也可以说是利用各种方式,先把数据存储在一个···容器···中,然后,再慢慢从这个容器中获取数据,实现·····异步操作数据库·····的方式,以便降低数据库的压力。

  不管消息队列是什么,个人姑且认为它就是一种存储数据的···容器···,就这么简单明了,呵呵,因为本人对消息队列这东西研究的比较肤浅。

  不过,在这里,我还是要卖弄一下一个个人的小实验代码,呵呵,假若下面的东西与消息队列相离太远,那么请看官可别见怪哦,因为我上面已经声明的很清楚了,本人对这东西还是不甚了解,只不过是工作之余卖弄一下‘文采’而已,所以,假如真有误解消息队列这个东西,我只能说声,请你指正我的错误,让笔者迷途知返。

  先给出连接mysql数据库配置文件mysql.ini的内容:

[database]
driver = mysql
host = 127.0.0.1
port = 3306
dbname = mysql
username = root
password = 1234
[options]
PDO::MYSQL_ATTR_INIT_COMMAND = set names utf8

  数据表文件queue.sql的内容:

-- 消息队列测试
-- 商品表
create table goods(
id int unsigned primary key auto_increment,
goodsname varchar(40) not null comment '商品名',
price decimal(9,2) not null comment '价格',
category_id tinyint unsigned not null comment '商品类别id',
sort tinyint comment '商品排序',
description varchar(255) comment '商品描述',
remark varchar(255) comment '备注'
)engine InnoDB default charset=utf8;
insert into goods values(default,'iPhone5s',5999,1,1,'美国入口贵重电子产品','请多多销售'),(default,'宏基手提电脑1',4888,3,1,'价格划算好电脑',null),(default,'f-30绒衣',200,2,1,'以纯白色厚皮羽绒服',null),(default,'n-100鞋子',300,4,1,'Nick品牌',null);

  下面是简单的消息队列实现PDO商品入库的代码:

  郑重提醒:请认真看我的注释,请认真看我的注释,请认真看我的注释。重要的信息要说三遍,呵呵!

<?php
namespace Home;
header('content-type:text/html;charset=utf-8;');
//引入PDO类
use \PDO;
use \PDOStatement;
use \PDOException;
/*简单消息队列*/
class Queue{
//容器可以是私有,最好是公有
static public $container=array();
//把PDO对象存放到属性中是为了跨方法使用
static private $pdo;
//构造函数实现初始化PDO连接数据库
public function __construct($file = './mysql.ini'){//mysql数据库的配置文件,./mysql.ini与这个类是同一个目录
//parse_ini_file函数作用,解析并获取ini文件的参数,加true是二维数组
$dbini = parse_ini_file($file,true);
$driver = $dbini['database']['driver'];
//这里的数据库是mysql的总数据库
$dbname = $dbini['database']['dbname'];
$host = $dbini['database']['host'];
$port = $dbini['database']['port'];
//构造PDO连接数据库的第一个参数,这个参数这么设置纯属是PDO类的语法,不懂的可以百度一下,这里就不做详解了
$dsn = $driver.':'.'dbname='.$dbname.';host='.$host.';port='.$port;
//其他连接数据库参数
$username = $dbini['database']['username'];
$password = $dbini['database']['password'];
$options = $dbini['options'];//初始化设置PDO选项
try{
self::$pdo = new PDO($dsn,$username,$password,$options);
//设置PDO属性。抛出错误报告
self::$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
try{
//选择商品数据表所在的数据库
self::$pdo->exec('use queue');
}catch(PDOException $e){
echo $e->getMessage();
}
}catch(PDOException $e){
echo $e->getMessage();
}
}
/*
*入列
*$data数组
*成功返回1,失败返回false,或者null
*/
public function _unshift($data =array()){
if(!is_array($data) || empty($data)){return false;}
$sql = 'default';
foreach($data as $k=>$v){
$sql .= ',"'.$v.'"';
}
//把$data转为sql语句,添加到队列容器contain中
$sql = 'insert into goods values('.$sql.')';
return @array_unshift(self::$container,$sql);
}
/*
*出列
*成功返回最后插入的数据id
*失败返回失败信息
*/
private static function _pop(){
try{//获取尾部的sql语句,出列
$sql = array_pop(self::$container);
self::$pdo->exec($sql);
//把剩余的容器值赋给中间变量
$middle = self::$container;
//判断中间变量是否为空,不为空则继续获取容器尾部的数据,继续出列
while($middle){
$sql = array_pop($middle);
self::$pdo->exec($sql);
//把数据再转给容器,也就是转给while循环外面的$middle,这样才能实现循环,让容器里面的数据全部出列,插入到数据库中
self::$container = $middle;
}
//返回的是,最后插入的id,失败是null
return self::$pdo->lastInsertId(); }catch(PDOException $e){
return $e->getMessage();
}
}
//析构函数,对象回收时调用,通过它实现自动让容器数据入库
public function __destruct(){
//当对象被回收时,判断容器是否存在消息,假如存在,则调用_pop方法,把消息出列
if(self::$container){
self::_pop();
}
}
}

  下面是同一级目录下调用这个类的文件的内容,当然,你也可以在上面那个queue类的下面调用_unshift方法实现消息队列的操作

<?php
include './queue.php';
use Home\Queue;//引入命名空间的Queue类
$ob = new Queue;
//消息入列
$ob->_unshift(array('goodsname'=>'vivo手机8888','price'=>1120,'category_id'=>1,'sort'=>1,'description'=>'vivo品牌','remark'=>'好用'));
$ob->_unshift(array('goodsname'=>'小米手机888','price'=>1998,'category_id'=>1,'sort'=>1,'description'=>'小米品牌手机','remark'=>'国产好货'));
//之所以打印出来,完成是为了看看效果,至于,有没有实现商品入库,你得去看看你的数据库了,呵呵
var_dump(Queue::$container);

PDO和消息队列的一点个人理解的更多相关文章

  1. Kafka消息队列初识

    一.Kafka简介 1.1 什么是kafka kafka是一个分布式.高吞吐量.高扩展性的消息队列系统.kafka最初是由Linkedin公司开发的,后来在2010年贡献给了Apache基金会,成为了 ...

  2. 7月目标 socket , 一致性哈希算法 ; mongodb分片; 分布式消息队列; 中间件的使用场景

      分布式的基础:一致性哈希  路由算法的一致性hash http://www.jiacheo.org/blog/174 http://www.tuicool.com/articles/vQVbmai ...

  3. System V 消息队列 实例

    前言: 消息队列是消息的链接表,存放在内核中,并由消息队列标识符标识.我们将称消息队列为 “队列”,其标识符为“队列I D”.msgget创建一个新队列或打开一个存在的队列; msgsnd向队列末端添 ...

  4. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  5. 快速理解Kafka分布式消息队列框架

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ ==是什么 == 简单的说,K ...

  6. [转载] 快速理解Kafka分布式消息队列框架

    转载自http://blog.csdn.net/xiaolang85/article/details/18048631 ==是什么 == 简单的说,Kafka是由Linkedin开发的一个分布式的消息 ...

  7. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  8. 消息队列 MQ 入门理解

    功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...

  9. 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 本场 Chat 主要内容: Kafk ...

随机推荐

  1. C++ 基础知识复习(二)

    异常处理部分: 23. 在c++的异常处理中,除了提供异常的关键字语法支持以外,其标准库中支持异常处理而封装异常类也很好的为应用程序中异常处理判断使用提供直接的帮助.C++语言中针对异常处理提供了三个 ...

  2. Word2vec多线程(tensorflow)

    workers = [] for _ in xrange(opts.concurrent_steps): t = threading.Thread(target=self._train_thread_ ...

  3. Python安装包或模块的多种方式汇总

    windows下安装python第三方包.模块汇总如下(部分方式同样适用于其他平台): 1. windows下最常见的*.exe,*msi文件,直接运行安装即可: 2. 安装easy_install, ...

  4. MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)

    在我们阅读boot loader代码时,遇到了两个非常重要的概念,实模式(real mode)和保护模式(protected mode). 首先我们要知道这两种模式都是CPU的工作模式,实模式是早期C ...

  5. STL set 用法

      c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. ...

  6. dedecms头部常用:标题,栏目描述,关键词

    调用SEO标题:<title>{dede:field.title/}_{dede:field.seotitle /}-{dede:global.cfg_webname/}</titl ...

  7. 【Ajax 基础学习】

    http://www.cnblogs.com/guduoduo/p/3681296.html 今天简单的学习了 Ajax 的基础知识,总结在这里.部分代码不是原创,特此说明. [Ajax 简介] AJ ...

  8. 冰球项目日志2-yjw

    我们小组在12.31号进行了讨论,确定了基本的任务及分工,后面是元旦放假,大家没有做很多的东西,我也是把自己分工的部分方案想了下. 后面在1.3号,我们会再进行一次小组讨论,确定下最终的方案,然后进行 ...

  9. poj2689Prime Distance 素数测试

    朴素素数测试是O(x1/2)的,每一个数都测试下来就炸了 然而如果全部预处理的话才是做大死,时间空间各种炸(大约有1亿个数) 所以怎么平衡一下呢? 其实在预处理的时候可以只处理一半:把21474836 ...

  10. Excel转Json,Json转CSharp

    一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊. 程序这边对应的解析类就得改动啊.整一个麻烦了得! 所以我就整理了这个Excel2J ...