Home  >  Article  >  Backend Development  >  PHP结合memcacheq消息队列解决并发有关问题

PHP结合memcacheq消息队列解决并发有关问题

WBOY
WBOYOriginal
2016-06-13 12:18:26818browse

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代码示例:

  1. $memcache_obj?=?new?Memcache;
  2. $memcache_obj->connect('192.168.1.106',?22201);
  3. $memcache_obj->set('a',time(),0,0);//入栈
  4. echo?$memcache_obj->get('a');??????//出栈
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn