简介
MemcacheQ 是一个基于轻量级消息队列服务器。新浪微博曾经大规模使用,它有几个特点
- 无与伦比的简单
- 非常快
- 支持多个队列
- 高并发性
- 与memcache协议兼容
准备
- MemcacheQ memcacheq-0.2.0.tar.gz 官网
- libevent libevent-2.0.22-stable.tar.gz 官网
- BerkeleyDB db-6.1.26.tar.gz 官网
安装
- 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 <num> TCP port number to listen on (default: 22201)
-U <num> UDP port number to listen on (default: 0, off)
-s <file> unix socket path to listen on (disables network support)
-a <mask> access mask for unix socket, in octal (default 0700)
-l <ip_addr> interface to listen on, default is INDRR_ANY
-d run as a daemon
-r maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-c <num> 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 <file> save PID in <file>, only used with -d option
-t <num> number of threads to use, default 4
--------------------BerkeleyDB Options-------------------------------
-m <num> in-memmory cache size of BerkeleyDB in megabytes, default is 64MB
-A <num> underlying page size in bytes, default is 4096,
-H <dir> env home of database, default is '/data1/memcacheq'
-L <num> log buffer size in kbytes, default is 32KB
-C <num> do checkpoint every <num> seconds, 0 for disable, default is 5 minutes
-T <num> do memp_trickle every <num> seconds, 0 for disable, default is 30 seconds
-S <num> do queue stats dump every <num> seconds, 0 for disable, default is 30 seconds
-e <num> percent of the pages in the cache that should be clean, default is 60%
-E <num> how many pages in a single db file, default is 16*1024, 0 for disable
-B <num> specify the message body length in bytes, default is 1024
-D <num> do deadlock detecting every <num> 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 <queue name> <flags> 0 <message_len>
<put your message body here>
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
###扩展阅读