MemcacheQ消息队列在Linux中编译安装自启动教程

Share on:

队列(Queue)是一种常用的数据结构。在队列这种数据结构中,最先插入的元素将会最先被取出;反之最后插入的元素将会最后被取出,因此队列又称为“先进先出”(FIFO:First In First Out)的线性表。

加入元素的一端叫“队尾”,取出元素的一端叫“队头”。利用消息队列可以很好地异步处理数据的传送和存储,当遇到频繁且密集地向后端数据库中插入数据时,就可采用消息队列来异步处理这些数据写入。

MemcacheQ是一款基于Memcache协议的开源消息队列服务软件,由于其遵循了Memcache协议,因此开发成本很低,不需要学习额外的知识便可轻松掌握。

我在最近的一个项目中也应用了MemcacheQ,下面我将分享一下MemcacheQ在Linux中的编译和安装过程。

首先,MemcacheQ依赖于BerkeleyDB和Libevent,如果服务器中曾经安装过Memcached,那么Libevent应该已经存在了,否则就需要先下载安装Libevent。

下载链接如下:

<span style="font-size: 12pt;">tar zvxf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent
make && make install
echo "/usr/local/libevent/lib" >> /etc/ld.so.conf
ldconfig</span>
<span style="font-size: 12pt;">tar zxvf db-6.0.30.tar.gz
cd db-6.0.30/build_unix
../dist/configure --prefix=/usr/local/berkeleydb
make && make install
ln -s /usr/local/berkeleydb/lib/libdb-6.0.so /usr/lib/
echo "/usr/local/berkeleydb/lib/" >> /etc/ld.so.conf
ldconfig</span>
<span style="font-size: 12pt;">tar zxvf memcacheq-0.2.0.tar.gz
cd memcacheq-0.2.0
./configure --prefix=/usr/local/memcacheq --with-bdb=/usr/local/berkeleydb --with-libevent=/usr/local/libevent --enable-threads
make && make install</span>
<span style="font-size: 12pt;">/usr/local/memcacheq/bin/memcacheq -d -uroot -r -l 127.0.0.1 -p11210 -H /usr/local/mcq -N -R -v -L 1024 -B 1024 > /usr/local/mcq/logs/mcq_error.log 2>&1</span>
<span style="font-size: 12pt;">vi /etc/rc.local</span>
<span style="font-size: 12pt;">-p  TCP监听端口(default: 22201)
-U  UDP监听端口(default: 0, off)
-s  unix socket路径(不支持网络)
-a  unix socket访问掩码(default 0700)
-l  监听网卡
-d  守护进程
-r  最大化核心文件限制
-u  以用户身份运行(only when run as root)
-c  最大并发连接数(default is 1024)
-v  详细输出 (print errors/warnings while in event loop)
-vv 更详细的输出 (also print client commands/reponses)
-i  打印许可证信息
-P  PID文件
-t  线程数(default 4)</span>
<span style="font-size: 12pt;"><?php
$mcq = memcache_connect('127.0.0.1', 11210) or die ('Connect Error!');
var_dump($mcq);
for ($i=1; $i<=5; $i++) {
 memcache_set($mcq, 'k', $i, 0, 0);
}
for ($i=1; $i<=6; $i++) {
 $queue = memcache_get($mcq, 'k');
 if ($queue === false) {
   echo "null\n";
 } else {
   echo $queue."\n";
 }
}
memcache_close($mcq);
?>
~                </span>
闽ICP备12003472号-7