下面來給大家整理一篇關于Linux中編譯安裝MemcacheQ,如果你正在學習這類開發不防一起來看看吧,希望這個例子可以幫助到各位同學.
隊列(Queue)是一種常用的數據結構,在隊列這種數據結構中,最先插入的元素將會最先被取出,反之最后插入的元素將會最后被取出,因此隊列又稱為“先進先出”(FIFO:First In First Out)的線性表.
加入元素的一端叫“隊尾”,取出元素的一端叫“隊頭”,利用消息隊列可以很好地異步處理數據的傳送和存儲,當遇到頻繁且密集地向后端數據庫中插入數據時,就可采用消息隊列來異步處理這些數據寫入.
MemcacheQ是一款基于Memcache協議的開源消息隊列服務軟件,由于其遵循了Memcache協議,因此開發成本很低,不需要學習額外的知識便可輕松掌握.
我在最近的一個項目中也應用了MemcacheQ,下面我將分享一下MemcacheQ在Linux中的編譯和安裝過程.
首先,MemcacheQ依賴于BerkeleyDB和Libevent,如果服務器中曾經安裝過Memcached,那么Libevent應該已經存在了,否則就需要先下載安裝Libevent.
下載鏈接如下:
Libevent:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
Berkeley DB:http://download.oracle.com/otn/berkeley-db/db-6.0.30.tar.gz
MemcacheQ:https://github.com/stvchu/memcacheq
安裝Libevent:
- tar zvxf libevent-2.0.21-stable.tar.gz
- cd libevent-2.0.21-stable
- ./configure --prefix=/usr/local/libevent
- make && make install
- echo "/usr/local/libevent/lib" >> /etc/ld.so.conf
- ldconfig
安裝BerkeleyDB:
BerkeleyDB簡介:BerkeleyDB是一個開源的文件數據庫,介于關系數據庫與內存數據庫之間,使用方式與內存數據庫類似,它提供的是一系列直接訪問數據庫的函數,而不是像關系數據庫那樣需要網絡通訊、SQL解析等步驟.
MemcacheQ依賴BerkleyDB用于隊列數據的持久化存儲,以免在MemcacheQ意外崩潰或中斷時,隊列數據不會丟失.
- tar zxvf db-6.0.30.tar.gz
- cd db-6.0.30/build_unix
- ../dist/configure --prefix=/usr/local/berkeleydb
- make && make install
- ln -s /usr/local/berkeleydb/lib/libdb-6.0.so /usr/lib/
- echo "/usr/local/berkeleydb/lib/" >> /etc/ld.so.conf
- ldconfig
安裝MemcacheQ:
- tar zxvf memcacheq-0.2.0.tar.gz
- cd memcacheq-0.2.0
- ./configure --prefix=/usr/local/memcacheq --with-bdb=/usr/local/berkeleydb --with-libevent=/usr/local/libevent --enable-threads
- make && make install
啟動MemcacheQ:
- Shell
- /usr/local/memcacheq/bin/memcacheq -d -uroot -r -l 127.0.0.1 -p11210 -H /usr/local/mcq -N -R -v -L 1024 -B 1024 > /usr/local/mcq/logs/mcq_error.log 2>&1
附:MemcacheQ參數:
- -p <num> TCP監聽端口(default: 22201)
- -U <num> UDP監聽端口(default: 0, off)
- -s <file> unix socket路徑(不支持網絡)
- -a <mask> unix socket訪問掩碼(default 0700)
- -l <ip_addr> 監聽網卡
- -d 守護進程
- -r 最大化核心文件限制
- -u <username> 以用戶身份運行(only when run as root)
- -c <num> 最大并發連接數(default is 1024)
- -v 詳細輸出 (print errors/warnings while in event loop)
- -vv 更詳細的輸出 (also print client commands/reponses)
- -i 打印許可證信息
- -P <file> PID文件
- -t <num> 線程數(default 4)
用PHP測試一下:
- <?php
- $mcq = new Memcache;
- $mcq->connect('127.0.0.1', 11210) or die ('Connect Error!');
- for ($i=1; $i<=5; $i++) {
- memcache_set($mcq, 'k', $i, 0, 0);
- } //Vevb.com
- for ($i=1; $i<=6; $i++) {
- $queue = memcache_get($mcq, 'k');
- if ($queue === false) {
- echo "null\n";
- } else {
- echo $queue."\n";
- }
- }
- memcache_close($mcq);
- ?>
|
新聞熱點
疑難解答