PHP结合memcacheq消息队列解决并发问题
在处理业务逻辑时有可能遇到高并发问题,例如商城秒杀、微博评论等。如果不做任何措施可能在高瞬间造成服务器瘫痪,如何解决这个问题呢?队列是个不错的选择。队列(Queue)又称先进先出(First In First Out)利用消息队列可以很好地异步处理数据传送和存储,当你向数据库中写入数据就可采取消息队列来异步插入。只要有并发限制的地方基本都可以使用队列来解决。这里先重点介绍一下memcacheq。
持久化消息队列memcacheq是一个轻量级的消息队列。依附于Berkeley DB和libevent。Berkeley DB用于持久化存储队列的数据,避免在memcacheq出问题时造成数据丧失。接下来看一下安装过程,首先下载libevent-1.4X***、BerkeleyDB5.0、memcacheq-0.2.0,下载地址:
http://monkey.org/~provos/libevent/
http://download.oracle.com/berkeley-db/db-5.0.21.tar.gz
http://code.google.com/p/memcacheq/downloads/list
安装步骤:
tar zxvf libevent-1.4.14b-stable.tar.gz
cd
libevent-1.4.14b-stable
./configure
make
make install
ln -s
/usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
cd ..
tar zxvf
db-5.0.21.tar.gz
cd
db-5.0.21/build_unix/
../dist/configure
make
make install
vi
/etc/ld.so.conf
加入以下两行
/usr/local/lib
/usr/local/BerkeleyDB.5.0/lib
执行
ldconfig
cd
../../
tar zxvf memcacheq-0.2.0.tar.gz
cd memcacheq-0.2.0
./configure
--with-bdb=/usr/local/BerkeleyDB.5.0 --with-libevent=/usr/local/lib
--enable-threads
make
make install
启动前确定一下 日志目录是否存在
如果不存在需要手动创建
memcacheq -d -r -uroot -p22201 -H /data0/memcacheq -N -v -L 1024
-B 1024 > /data0/mq_error.log 2>&1
参数说明:
-d : 以后台服务方式运行
-l : 设置监听地址及端口(默认端口是22201)
-A : 数据页大小
-H : 数据保存目录 一定要存在
-B :
队列中每条数据的最大长度(字节)
-N : 使用内存缓冲方式保存数据至磁盘,从而获得极高性能。若无此参数,性能会很差
-R :
自动清理过期的日志 -u : 设置memcacheq进程账号
PHP代码示例:
- $memcache_obj = new Memcache;
- $memcache_obj->connect('192.168.1.106', 22201);
- $memcache_obj->set('a',time(),0,0);//入栈
- echo $memcache_obj->get('a'); //出栈
PHP结合memcacheq消息队列解决并发问题的更多相关文章
- 使用kafka消息队列解决分布式事务(可靠消息最终一致性方案-本地消息服务)
微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 本文转自:http://skaka.me/blog/2016/04/21/springcloud1/ 不同于单一 ...
- java消息队列
来个个人通俗的解释吧.消息队列,顾名思义 首先是个队列.队列的操作有入队和出队 也就是你有一个程序在产生内容然后入队(生产者) 另一个程序读取内容,内容出队(消费者) 我想你应该是缺乏一个使用场景. ...
- 消息队列的使用场景(转载c)
作者:ScienJus链接:https://www.zhihu.com/question/34243607/answer/58314162来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业 ...
- Java分布式:消息队列(Message Queue)
Java分布式:消息队列(Message Queue) 引入消息队列 消息,是服务间通信的一种数据单位,消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.队列,是一种常见的数据结 ...
- RabbitMQ 消息队列 应用
安装参考 详细介绍 学习参考 RabbitMQ 消息队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. M ...
- PHP消息队列学习
在我们平常网站设计时,会遇到“给用户群发短信”,“商城订单系统大批量订单处理”,“商城秒杀活动”等需求,这些功能,都有一个共同的特点:就是在面对高迸发的同时,必须要保证系统处理数据的有效性.那么如何处 ...
- java消息队列怎么用
消息队列的使用场景是怎样的? 经常听到诸如rebbitmq,activemq,请教一下各位前辈消息队列的使用场景是怎样的,什么时候会用到它 校验用户名等信息,如果没问题会在数据库中添加一个用户记录 ...
- 消息队列扫盲(RocketMQ 入门)
消息队列扫盲 消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧? 所以问题并不是消息队列是什么,而是 消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带 ...
- ActiveMQ消息队列的使用及应用
这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...
随机推荐
- sql语句:创建事物
BEGIN TRAN Tran_Money --开始事务 DECLARE @tran_error int; ; BEGIN TRY WHERE Name = '刘备'; SET @tran_error ...
- C#键盘事件处理(来源网上)
C#键盘事件处理 如果你希望用户按F1弹出chm帮助,代码如下: private void FrmMain_Load(object sender, EventArgs e) { this.KeyPre ...
- localStorage eval script
var globalEval =function(data) { (window.execScript || function(data){ window.eval.call(window,data) ...
- FB面经 Prepare: Task Schedule
tasks has cooldown time, give an input task id array, output finish time input: AABCA A--ABCA output ...
- iOS 协议
协议分为三部分:声明.引用.实现. 通常,声明协议和声明协议类型的属性都是在同一个类中.声明协议和声明协议作为属性在头文件中,引用在声明类的实现文件中.而实现协议则在其它类中.
- 安装MYSql Windows7下MySQL5.5.20免安装版的配置
MySQL Windows安装包说明: 1.mysql-5.5.20-win32.msi:Windows 安装包,图形化的下一步下一步的安装. 2.mysql-5.5.20.zip,这个是window ...
- Delphi操作XML
Delphi操作XML Delphi操作XMl,只要使用 NativeXml.我是用的版本是4..NativeXML的使用方法比较简单,但是功能很强大. XE2的话,要在simdesign.inc后面 ...
- Unity3D 相关技术
slua相关shader编程相关animation相关attack check攻击检测相关
- mybatis springmvc调用oracle存储过程,返回记录集
参考: http://bbs.csdn.net/topics/390866155 辅助参考: http://www.2cto.com/kf/201307/226848.html http://blog ...
- Android开发系列之adb常用命令
对于Android开发者来说,如果没有adb的帮助,那肯定就跟少了一只手那样别扭.其实笔者在刚刚学习Android开发的时候,也没有意识到adb的重要性.想想只要用IDE画出界面,然后实现后台的逻辑代 ...