初试memcacheq

今天在拜读新浪微博架构师Tim在QCon Beijing 2010上的演讲 的时候了解到新浪微博大规模使用memcacheq作为消息队列,正好公司最近在评估一些MQ的产品,就简单尝试了一下。

 

按照官方的说法,memcacheq有五大优势:

1. 无与伦比的简单

2. 非常快

3. 支持多个队列

4. 高并发性

5. 与memcache协议兼容

 

安装和启动请参考这里 ,需要bdb和libevent。基于libmemcached简单写了一个小程序测试了一下,的确很简单,producer利用memcached_set发消息,consumer利用memcached_get接收消息,其中参数key作为消息队列的名称。今天先贴代码,其它的慢慢再研究吧。

 

#include #include #include "libmemcached/memcached.h" const char* msgs[] = {"message1", "message2", "message3", "message4"}; int main (int argc, char* argv[]) { memcached_st *memc; memcached_return_t rc; memcached_server_st *servers; char* retstr; size_t retlen; uint32_t retflags; int i,j; memc = memcached_create(NULL); servers = memcached_server_list_append(NULL, "localhost", 22201, &rc); rc = memcached_server_push(memc, servers); memcached_server_free(servers); /* make sure the queue is cleared */ memcached_delete(memc, "testqueue", 9, 0); /* produce message */ for (i = 0; i < sizeof(msgs)/sizeof(const char*); ++i) memcached_set(memc, "testqueue", 9, msgs[i], strlen(msgs[i])+1, 0, 0); /* consume message */ for (i = 0; i < sizeof(msgs)/sizeof(const char*); ++i) { retstr = memcached_get(memc, "testqueue", 9, &retlen, &retflags, &rc); assert(strcmp(retstr, msgs[i]) == 0); assert(retlen == strlen(msgs[i])+1); assert(retflags == 0); free(retstr); } memcached_free(memc); return 0; }

 

 

你可能感兴趣的:(MQ,Memcached)