memcacheq 應用背景及特點
由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達mysql,直接導致無數的行鎖表鎖,甚至最後請求會堆積過多,從而觸發too manyconnections錯誤。通過使用訊息佇列,我們可以非同步處理請求,從而緩解系統的壓力。持久化訊息佇列memcacheq(簡稱mcq)是乙個輕量級的訊息佇列。mcq依賴於berkeley db和libevent。berkeley db用於持久化儲存佇列的資料,避免在mcq崩潰或這伺服器當掉時候,不至於資料丟失。
memcacheq特點:
1.damn ****** (簡單易用)
2.very fast (處理速度快)
3.multiple queue (多條佇列)
4.concurrent well (併發效能好)
5.memcache protocol compatible (與memcache的協議相容)
使用場景:高併發、資料可以弱一致性
安裝 安裝過程不再贅述,注意必須先安裝libevent , berkeleydb.
(最好使用yum安裝,穩定性和相容性可以得到保證, libevent 需要1.4.x更高的版本)
啟動memcacheq -d -r -u root -p22201 -h /data1/memcacheq -n -r -v -l 1024 -b 1024 > /data1/memcacheq/mcq_error.log 2>&1
使用 memcached -h 檢視命令列選項:
--------------------memcacheq options-------------------------------
-p tcp監聽埠(default: 22201)
-u udp監聽埠(default: 0, off)
-s unix socket路徑(不支援網路)
-a unix socket訪問掩碼(default 0700)
-l 監聽網絡卡
-d 以守護程序方式執行
-r 最大化核心檔案限制
-u 以使用者身份執行(only when run as root)
-c 最大併發連線數(default is 1024)
-v 詳細輸出 (print errors/warnings while in event loop)
-vv 更詳細的輸出 (also print client commands/reponses)
-i 列印許可證資訊
-p pid檔案
-t 執行緒數(default 4)
--------------------berkeleydb options-------------------------------
-m berkeleydb記憶體快取大小, default is 64mb
-a 底層頁面大小, default is 4096, (512b ~ 64kb, power-of-two)
-h 資料庫家目錄, default is '/data1/memcacheq'
-l 日誌緩衝區大小, default is 32kb
-c 多少秒checkpoint一次, 0 for disable, default is 5 minutes
-t 多少秒memp_trickle一次, 0 for disable, default is 30 seconds
-s 多少秒queue stats dump一次, 0 for disable, default is 30 seconds
-e 達到快取百分之多少需要重新整理, default is 60%
-e 乙個單一的db檔案有多少頁, default is 16*1024, 0 for disable
-b 指定訊息體的長度,單位位元組, default is 1024
-d 多少毫秒做一次死鎖檢測(deadlock detecting), 0 for disable, default is 100ms
-n 開啟db_txn_nosync獲得巨大的效能改善, default is off
-r 自動刪除不再需要的日誌檔案, default is off
常用命令
命令: set, get, stats queue, delete
寫佇列:
set 0 \r\n
\r\n
stored\r\n
取佇列:
get \r\n
value \r\n
\r\n
end\r\n
可以看到,和memcache協議基本一致,只是把key name換成queue name,而且在set的命令中,忽略了expire_time的引數。畢竟mcq的資料儲存是存在berkeleydb中,做了持久化儲存,沒有記憶體的過期時間。
當使用set命令時,就向指定的訊息佇列中寫入了一條新訊息,也就是向berkeleydb中新insert了一條資料,當使用get命令時,就從指定佇列中取出一條新訊息,也就是向berkeleydb中delete了一條資料。當使用stats檢視乙個指定佇列時,可以看到這個佇列一共接收了多少訊息,其中被取出了多少條。
5. 可能出現的問題
<1>執行: /usr/local/memcacheq/bin/memcacheq -h 錯誤資訊:/usr/local/memcacheq/bin/memcacheq: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: no such file or directory
解決方法:ln -s /usr/local/memcacheq/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
注: 64位作業系統,需執行 ln -s /usr/local/memcacheq/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2
<2> 提示錯誤資訊: memcacheq: error while loading shared libraries: libdb-5.0.so: cannot open shared object file: no such file or directory
解決辦法:
在/usr/lib 下建個 libdb-5.0.so 軟鏈就ok啦
ln -s /usr/local/berkeleydb.5.0/lib/libdb-5.0.so /usr/lib/
6. 關閉memcacheq
找到memcacheq的程序殺掉 kill -9, ps -ef |grep memcacheq
7.例項
xshell:\> telnet 127.0.0.1 22201
stats queue
endset test_queue 0 0 2 //佇列新增一條訊息
12stored
set test_queue 0 0 2
34stored
get test_queue //從佇列中取出一條訊息
value test_queue 0 2
12end
stats queue
stat test_queue 2/1 //佇列中有2條訊息,已取出一條
enddelete test_queue //刪除佇列
deleted
stats queue
end
MemcacheQ安裝及使用
一.安裝 memcacheq 是乙個簡單的分布式佇列服務,它的執行依賴於berkeleydb 和 libevent,所以需要先安裝berkeleydb和libevent.download from how to install berkeleydb tar xvzf db 5.3.21.tar.gz...
MemcacheQ 安裝與使用
blog.csdn.net fdipzone article details 17933673 comments 特點 1.簡單易用。2.處理速度快。3.可建立多條佇列。4.併發效能高。5.與memcache協議相容。memcacheq 依賴 berkeley db 和 libevent 1.4 或...
MemcacheQ安裝及使用
一.memcacheq安裝記錄 解壓.configure prefix usr local memcacheq enable threads make make install 二.memcacheq啟動 1.啟動 usr local memcacheq bin memcacheq d r uroo...