memcacheQ是一个单纯的分布式消息队列服务。
Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too manyconnections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。在Web2.0的时代,高并发的情况越来越常见,从而使消息队列有成为居家必备的趋势,相应的也涌现出了很多实现方案,像Twitter以前就使用RabbitMQ实现消息队列服务,现在又转而使用Kestrel来实现消息队列服务,此外还有很多其他的选择,比如说:ActiveMQ,ZeroMQ等。
上述消息队列的软件中,大多为了实现AMQP,STOMP,XMPP之类的协议,变得极其重量级,但在很多Web应用中的实际情况是:我们只是想找到一个缓解高并发请求的解决方案,不需要杂七杂八的功能,一个轻量级的消息队列实现方式才是我们真正需要的。
1 简单易用
2 处理速度快
3 多条队列
4 并发性能好
5 与memcache的协议兼容。这就意味着只要装了memcache的extension就可以了,不需要额外的插件。
MEMCACHEQ依赖于libevent和BerkleyDB。
BerkleyDB用于持久化存储队列的数据。 这样在MEMCACHEQ崩溃或者服务器挂掉的时候,
不至于造成数据的丢失。这一点很重要,很重要。
它的安装依赖于BerkeleyDB 和 libevent,所以要先安装这BerkeleyDB和libevent:
memcacheq -d-r-H/data/memcacheq -N-R-v-L1024-u nobody &> \
/data/memcacheq/error.log
解释一下:
-d 守护进程
-r Maximize core file limit
-v 详细输出
-u 以用户的身份来运行
-H BDB 文件的保存目录
-N Performance improvement
-R 太久的日志文件会被删除。
-L 日志缓存大小,默认是32K。 1024表示1024K。
其它参数:
-h help
-vv 更加详细的输出
不使用-d的话,输出会直接显示到控制台。
注:指定的用户必须有数据文件的读写权限,如这里的/data1/memcacheq和/data1目录.
可以使用”chown 用户名 目录” 的命令给目录授权.
使用ps命令查查memcacheQ的进程:ps -ef|grep wuf,然后直接将进程kill掉.
使用以上命令启动mq后,(注意上面的-B参数表示messag的body长度不能超过1024 bytes),使用mq时只需要用到两个命令:set和get。完全可以像使用Memcache一样。
测试:/usr/local/memcacheq/bin/memcachq -h
运行报:
memcacheq: error while loading shared libraries: libdb-5.1.so: cannot open shared object file: No such file or directory
解决方法:ln -s /usr/local/BerkeleyDB.5.1/lib/libdb-5.1.so /usr/lib/libdb-5.1.so
memcacheq: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
安装libevent
检查一下有没有安装libevent: ls -al /usr/lib |grep libevent
如果没有就安装libevent ,下载地址:http://www.libevent.org (首页 Download–Stable releases)
解压:# tar -zxvf libevent-***-.tar.gz
#cd libevent-***-
#./configure --prefix=/usr
#make && make install
安装完检测下 ls -al /usr/lib |grep libevent
lrwxrwxrwx 1 root root 21 02-06 20:26 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3
.................................
-rw-r--r-- 1 root root 11838 04-13 14:03 libevent_pthreads.a
-rwxr-xr-x 1 root root 996 04-13 14:03 libevent_pthreads.la
lrwxrwxrwx 1 root root 30 04-13 14:03 libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.6
lrwxrwxrwx 1 root root 21 04-13 14:03 libevent.so -> libevent-2.0.so.5.1.6