MemcacheQ安装及使用方法

 更新时间:2017年03月04日 21:17:23   投稿:mdxy-dxy  
MemcacheQ 是一个简单的分布式队列服务,它的运行依赖于BerkeleyDB 和 libevent,所以需要先安装BerkeleyDB和libevent,需要的朋友可以参考下

一. 安装
MemcacheQ 是一个简单的分布式队列服务,它的运行依赖于BerkeleyDB 和 libevent,所以需要先安装BerkeleyDB和libevent.
Berkeley DB 4.7 or later
Download from <http://www.oracle.com/database/berkeley-db/db/index.html>
How to install BerkeleyDB:

$tar -xvzf db-5.3.21.tar.gz
$cd db-5.3.21/
$cd build_unix/
$../dist/configure
$make
$make install

安装BerkeleyDB时,可以手动指定安装路径:

../dist/configure --prefix=/usr/local/berkeleydb

不指定的话,默认安装在:/usr/local/BerkeleyDB.5.3

libevent 1.4.x or later

先检查libevent 是否已经安装:

#rpm -qa|grep libevent
libevent-devel-2.0.10-2.fc15.x86_64
libevent-2.0.10-2.fc15.x86_64
libevent-2.0.10-2.fc15.i686

或者:

ls -al /usr/lib |grep libevent

如果还没有安装:

Download from <http://monkey.org/~provos/libevent/>
How to install libevent:

$tar -xvzf libevent-1.4.x-stable.tar.gz
$cd libevent-1.4.x-stable
$./configure
$make
$make install

安装libevent时,可以手动指定安装路径:

./configure --prefix=/usr/local/libevent

不指定的话,默认安装在:/usr/lib64(64位系统)或者/usr/lib(32位系统)

memcacheQ

下载软件包:http://code.google.com/p/memcacheq/downloads/list
解压缩,cd进目录

./configure --enable-threads
make
make install

configure 时,如果libevent 不是安装在默认目录,需--with--libevent=/usr/local/libevent指定libevent的安装目录
若没有将

/usr/local/lib
/usr/local/BerkeleyDB.5.3/lib

添加进/etc/ld.so.conf 并运行 /sbin/ldconfig 则需--with-bdb=/usr/local/BerkeleyDB.5.3 指定berkeleyDb库的路径

二.使用

启动memcacheQ
使用memcacheq -h 的命令来查看命令行选项
启动memcacheq:memcacheq -d -u nobody -r -H /tmp/memcacheq -N -R -v -L 1024 -B 1024 > /tmp/mq_error.log 2>&1
启动时需-u 参数,指定运行memcacheQ的用户,且指定的用户必须有数据文件的读写权限,如这里的/tmp/memcacheQ目录,否则不能启动

命令行使用memcacheQ
telnet 127.0.0.1 22202
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]'.

只有两个命令可以在命令行下使用memcacheQ
写对列:
set <queue name> <flags> 0 <message_len>\r\n
<put your message body here>\r\n
STORED\r\n
取出队列:
get <queue name>\r\n
VALUE <queue name> <flags> <message_len>\r\n
<your message body will come here>\r\n
END\r\n
与memcache协议基本一致,只是把key name换成queue name,而且在set的命令中,忽略了expire_time的参数。mq的数据存储是存在berkeleyDB中,做了持久化存储,没有内存的过期时间。
示例:
 telnet 127.0.0.1 22202
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]'.
set q4 0 0 5
hello
STORED
set q4 0 0 5
world
STORED
stats queue
STAT q4 2/0
END
get q4
VALUE q4 0 5
hello
END
stats queue
STAT q4 2/1
END

三.安装使用过程中可能出现的错误

1.编译出现错误:checking for library containing db_create... no
configure: error: cannot find libdb.so in /usr/local/BerkeleyDB.5.3/lib
需要修改 configure 中的BerkeleyDB中的预编译参数vim configure找到bdbdir="/usr/local/berkeleydb"改为
bdbdir="/usr/local/BerkeleyDB.5.3"再次编译

2.configure: error: cannot find libdb.so in /usr/local/BerkeleyDB.5.3/lib
出现此错误的原因在于没有安装BerkyleyDb,安装即可

3./usr/local/memcacheq/bin/memcachq -h
            运行报:
            memcacheq: error while loading shared libraries: libdb-5.3.so: cannot open shared object file: No such file or directory
        解决方法:ln -s /usr/local/BerkeleyDB.5.3/lib/libdb-5.3.so /usr/lib/libdb-5.3.so
       注:在64位操作系统中,需执行
ln -s /usr/local/BerkeleyDB.5.3/lib/libdb-5.3.so /usr/lib64/libdb-5.3.so

使用memcacheq做异步队列,做个简单的生产者-消费者模型。生产者将数据写入mq中,消费者异步去队列中去取数据,进而进一步的消费处理数据。

#!/usr/bin/env python
#-*- coding:utf8 -*-
 
import sys
import time
import random
 
import memcache
 
mc = memcache.Client(["%s:%s"%("127.0.0.1", "22202")])
queue_name = "q1"
def putter():
  count = 0
  while True:
    data = "hello%d"%(count)
    mc.set(queue_name, data)
    print "put ", data
    count += 1
    time.sleep(random.randint(1, 10))
 
def process_data(data):
  print "processing data :", data
 
def getter():
  while True:
    data = mc.get(queue_name)
    if data:
      process_data(data)
    else:
      print "no message, sleep for a while ..."
      time.sleep(30)
 
if __name__ == "__main__":
  if len(sys.argv) != 2:
    print "Wrong arg numbers"
  else:
    cmd = sys.argv[1]
    if cmd == "put": putter()
    elif cmd == "get": getter()
    else: print "wrong cmd"

在使用时,开两个终端模拟两个进程,在一个终端中运行

python mqdemo.py put

来模拟生产者;另一个终端中运行

python mqdemo.py get

模拟消费者。

相关文章

  • CentOS 7.2配置Apache服务httpd(下)

    CentOS 7.2配置Apache服务httpd(下)

    这篇文章主要为大家详细介绍了CentOS 7.2配置Apache服务 httpd上篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Linux中英文命令对应

    Linux中英文命令对应

    本文我们把Linux的中英文命令做了对应翻译,给需要的朋友参考一下。
    2017-12-12
  • 源码安装apache脚本部署过程详解

    源码安装apache脚本部署过程详解

    这篇文章主要介绍了源码安装apache脚本部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 如何使用iostat查看linux硬盘IO性能

    如何使用iostat查看linux硬盘IO性能

    这篇文章主要介绍了如何使用iostat查看linux硬盘IO性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 使用 DataAnt 监控 Apache APISIX的原理解析

    使用 DataAnt 监控 Apache APISIX的原理解析

    Apache APISIX 是一个开源的云原生 API 网关,作为 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能,这篇文章主要介绍了如何使用 DataAnt 监控 Apache APISIX,需要的朋友可以参考下
    2022-06-06
  • centos7下rsync+crontab定期同步备份

    centos7下rsync+crontab定期同步备份

    最近需求想定期备份内部重要的服务器数据到存储里面,接下来通过本文给大家分享centos7下rsync+crontab定期同步备份,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • 11个有用的Linux命令

    11个有用的Linux命令

    Linux命令行吸引了大多数Linux爱好者。一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务。今天为你解释下面几个命令:sudo、python、mtr、Ctrl+x+e、nl、shuf、shuf、last。
    2013-10-10
  • linux使用scp实现服务器A向服务器B传输文件

    linux使用scp实现服务器A向服务器B传输文件

    这篇文章主要介绍了linux使用scp实现服务器A向服务器B传输文件的相关资料,需要的朋友可以参考下
    2016-04-04
  • Linux系统使用Fuser命令的方法

    Linux系统使用Fuser命令的方法

    fuser命令是一个非常聪明的unix实用程序,用于查找正在使用某个文件、目录或socket的进程。这篇文章主要介绍了Linux系统使用Fuser命令的方法,需要的朋友可以参考下
    2020-06-06
  • Linux下浅谈crond与crontab的命令用法

    Linux下浅谈crond与crontab的命令用法

    本篇文章主要介绍了Linux下浅谈crond与crontab的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论