MemcacheQ學習總結

2021-07-03 15:34:21 字數 3757 閱讀 5839

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...