Memcache 持久化消息队列MemcacheQ

迷南。 2022-08-07 11:55 263阅读 0赞

memcacheQ是一个国内开发的基于memcache协议、BDB持久数据存储、高性能轻量级分布式消息队列服务。它的安装依赖于BerkeleyDB 和 libevent,所以要先安装这BerkeleyDB和libevent。
官网地址:http://memcachedb.org/memcacheq/
项目地址:
http://groups.google.com/group/memcachedb
https://github.com/stvchu/memcachedb

一、特点
1.简单高效,基于memcache协议,这意味着只要客户端支持memcache协议即可使用。
2.队列数据存储于BDB,持久保存。
3.并发性能好。
4.支持多条队列。

memcacheQ依赖于Berkeley DB和libevent。Berkeley DB用于持久化存储队列的数据,避免在memcacheq崩溃或这服务器当掉时候,不至于数据丢失。对于并发量较高的web环境,特别是数据库写入操作过多的情景,使用队列可大大缓解因并发问题造成的数据库锁死问题。

memcacheQ最大的优势是:它是基于Memcached开发的,可以通过各种Memcached命令对它进行操作。基于Memcached开发的应用完全不需要做任何修改。

二、安装
memcacheQ依赖于libevent和BDB(BerkleyDB),所以在安装memcacheQ之前先安装libevent和BerkleyDB。
mkdir libevent berkeleyDB
1.安装libevent
libevent 1.4.x or later
下载地址: http://www.monkey.org/~provos/libevent/
wget http://jaist.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
tar -zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure —prefix=/home/slim/libevent
make
make install
使用root用户将libevent运行库的路径添加到系统配置里面
echo “/home/slim/libevent/lib/“ >> /etc/ld.so.conf
/sbin/ldconfig
2.安装Berkeley DB
Berkeley DB 4.7 or later
下载地址:http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
wget http://download.oracle.com/otn/berkeley-db/db-6.1.23.tar.gz
tar -zxvf db-6.1.23.tar.gz
cd db-6.1.23
cd build_unix/
../dist/configure —prefix=/home/slim/berkeleyDB
make
make install
使用root用户将Berkeley+Db运行库的路径添加到系统配置里面
echo “/home/slim/berkeleyDB/lib/“ >> /etc/ld.so.conf
/sbin/ldconfig
3.安装memcacheQ
下载软件包:http://code.google.com/p/memcacheq/downloads/list,需翻墙下载
wget http://code.google.com/p/memcacheq/downloads/detail?name=memcacheq-0.2.0.tar.gz&can=2&q=
mkdir memcacheq
tar -zxvf memcacheq-0.2.0.tar.gz
cd memcacheq-0.2.0
./configure —prefix=/home/slim/memcacheq -with-bdb=/home/slim/berkeleyDB -with-libevent=/home/slim/libevent -enable-threads
make
make install
三、启动
cd ~/home/slim/memcacheq
建立数据和日志目录,用于memcacheQ保存数据和日志信息:
mkdir data logs
启动memcacheq:
./bin/memcacheq -d -l 192.168.36.189 -r -H /home/slim/memcacheq/data -N -R -v -L 1024 -B 1024 > /home/slim/memcacheq/logs/memcacheq.log 2>&1
参数说明:

  1. -p <num> TCP监听端口(default: 22201)
  2. -U <num> UDP监听端口(default: 0, off)
  3. -s <file> unix socket路径(不支持网络)
  4. -a <mask> unix socket访问掩码(default 0700)
  5. -l <ip_addr> 监听网卡
  6. -d 守护进程
  7. -r 最大化核心文件限制
  8. -u <username> 以用户身份运行(only when run as root)
  9. -c <num> 最大并发连接数(default is 1024)
  10. -v 详细输出 (print errors/warnings while in event loop)
  11. -vv 更详细的输出 (also print client commands/reponses)
  12. -i 打印许可证信息
  13. -P <file> PID文件
  14. -t <num> 线程数(default 4)
  15. --------------------BerkeleyDB Options-------------------------------
  16. -m <num> BerkeleyDB内存缓存大小, default is 64MB
  17. -A <num> 底层页面大小, default is 4096, (512B ~ 64KB, power-of-two)
  18. -H <dir> 数据库家目录, default is '/data1/memcacheq'
  19. -L <num> 日志缓冲区大小, default is 32KB
  20. -C <num> 多少秒checkpoint一次, 0 for disable, default is 5 minutes
  21. -T <num> 多少秒memp_trickle一次, 0 for disable, default is 30 seconds
  22. -S <num> 多少秒queue stats dump一次, 0 for disable, default is 30 seconds
  23. -e <num> 达到缓存百分之多少需要刷新, default is 60%
  24. -E <num> 一个单一的DB文件有多少页, default is 16*1024, 0 for disable
  25. -B <num> 指定消息体的长度,单位字节, default is 1024
  26. -D <num> 多少毫秒做一次死锁检测(deadlock detecting), 0 for disable, default is 100ms
  27. -N 开启DB_TXN_NOSYNC获得巨大的性能改善, default is off
  28. -R 自动删除不再需要的日志文件, default is off

四、使用测试
1.使用mq时只需要用到两个命令:set和get

set 0


STORED
get
VALUE


END

  1. set queue_test 0 0 3
  2. abc
  3. STORED
  4. get queue_test
  5. VALUE queue_test 0 3
  6. abc
  7. END
  8. get queue_test
  9. END

可以看到,和memcache协议基本一致,只是把key name换成queue name,而且在set的命令中,忽略了expire_time的参数。毕竟mq的数据存储是存在berkeleyDB中,做了持久化存储,没有内存的过期时间。当使用set命令时,就向指定的消息队列中写入了一条新消息,也就是向BerkeleyDB中新insert了一条数据,当使用get命令时,就从 指定队列中取出一条新消息,也就是向BerkeleyDB中delete了一条数据。

2.查看统计情况
stats 查看memcacheQ统计情况
stats queue 查看队列统计情况

  1. set queue_test 0 0 3
  2. xxx
  3. STORED
  4. stats
  5. STAT pid 13554
  6. STAT uptime 173
  7. STAT time 1428161993
  8. STAT version 0.2.0
  9. STAT pointer_size 32
  10. STAT rusage_user 0.032994
  11. STAT rusage_system 0.270958
  12. STAT curr_connections 5
  13. STAT total_connections 6
  14. STAT connection_structures 6
  15. STAT get_cmds 2
  16. STAT get_hits 1
  17. STAT set_cmds 2
  18. STAT set_hits 2
  19. STAT bytes_read 120
  20. STAT bytes_written 81
  21. STAT threads 4
  22. END
  23. stats queue
  24. STAT queue_test 2/1
  25. END

3.删除一个队列
telnet 192.168.36.189 22201
delete queue_test
4.也可以使用db_stat查看一个队列有多少记录
cd /home/slim/memcacheq/data/
/home/slim/berkeleyDB/bin/db_stat -d queue_test

  1. Sat Apr 4 08:46:54 2015 Local time
  2. 42253 Queue magic number
  3. 4 Queue version number
  4. 1024 Fixed-length record size
  5. 0x20 Fixed-length record pad
  6. 4096 Underlying database page size
  7. 16384 Underlying database extent size
  8. 3 Number of records in the database
  9. 3 Number of data items in the database
  10. 1 Number of database pages
  11. 0 Number of bytes free in database pages (100% ff)
  12. 1 First undeleted record
  13. 4 Next available record number

发表评论

表情:
评论列表 (有 0 条评论,263人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ActiveMQ消息持久

    前言 在前面我我们讲JMS规范的时候有简单的说过activeMQ的消息持久化,演示了如何来设置使消息能够持久化存储。 本次呢,我们将来深入了解activeMQ的消息持久

    相关 MQ持久消息

    ActiveMQ的另一个问题就是只要是软件就有可能挂掉,挂掉不可怕,怕的是挂掉之后把信息给丢了,所以本节分析一下几种持久化方式: 一、持久化为文件 ActiveMQ默认...