简介
MemcacheQ 是一个基于轻量级消息队列服务器。新浪微博曾经大规模使用,它有几个特点
无与伦比的简单
非常快
支持多个队列
高并发性
与memcache协议兼容
准备
安装
libevent
tar xzf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure
make && make install
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
BerkeleyDB
tar xzf db-6.1.23.tar.gz
cd db-6.1.23
cd build_unix
../dist/configure --prefix=/usr/local/BerkeleyDB.6.1
make && make install
memcacheQ
tar xzf memcacheq-0.2.0.tar.gz
cd memcacheq-0.2.0
./configure --enable-threads --with-bdb=/usr/local/BerkeleyDB.6.1
make
make install
测试是否安装成功
/usr/local/bin/memcacheq -h
-p TCP port number to listen on (default: 22201)
-U UDP port number to listen on (default: 0, off)
-s unix socket path to listen on (disables network support)
-a access mask for unix socket, in octal (default 0700)
-l interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u assume identity of (only when run as root)
-c max simultaneous connections, default is 1024
-v verbose (print errors/warnings while in event loop)
-vv very verbose (also print client commands/reponses)
-h print this help and exit
-i print license info
-P save PID in , only used with -d option
-t number of threads to use, default 4
--------------------BerkeleyDB Options-------------------------------
-m in-memmory cache size of BerkeleyDB in megabytes, default is 64MB
-A underlying page size in bytes, default is 4096,
-H
-L log buffer size in kbytes, default is 32KB
-C do checkpoint every seconds, 0 for disable, default is 5 minutes
-T do memp_trickle every seconds, 0 for disable, default is 30 seconds
-S do queue stats dump every seconds, 0 for disable, default is 30 seconds
-e percent of the pages in the cache that should be clean, default is 60%
-E how many pages in a single db file, default is 16*1024, 0 for disable
-B specify the message body length in bytes, default is 1024
-D do deadlock detecting every millisecond, 0 for disable, default is 100ms
-N enable DB_TXN_NOSYNC to gain big performance improved, default is off
-R automatically remove log files that are no longer needed, default is off
使用
启动服务脚本
/usr/local/bin/memcacheq -d -r -H /opt/memcacheq -N -R -v -L 1024 -B 1024 -u root > /opt/logs/memcacheq/mq_error.log 2>&1
常用参数
## -d 作为守护进程
## -r 最大描述文件数
## -H BerkeleyDB文件的保存目录
## -N 改善性能
## -v 详细输出
## -L 日志缓存大小 单位KB
## -B 数据最大长度
## -u 以用户的身份来运行
shell中使用
telnet 127.0.0.1 22201
php中使用
$memcache_obj = new Memcache;
$memcache_obj->connect('127.0.0.1', 22201);
$memcache_obj->set('name','keyvalue',0,0);
$task = $memcache_obj->get('name');
echo $task
shell 中使用
set 0
STORED
示例:
set test 0 0 1
a
STORED
stats queue # 查看队列
delete name # 表示删除name的队列
上图表示队列name里面有4条信息,读取了3条
###问题集合
/usr/local/bin/memcacheq: error while loading shared libraries: libdb-6.1.so: cannot open shared object file: No such file or directory
在/etc/ld.so.conf中加入BerkeleyDB 的lib目录这一行,然后ldconfig
###扩展阅读