linux memcached 安裝和使用

2021-07-05 15:19:25 字數 4191 閱讀 4184

參考文章:memcached詳細

參考文章:memcached深入理解

首先需要安裝libevent 

然後安裝memcache

啟動memcached 

執行 /usr/local/bin/memcached -p(設定埠號) 11211  -m(設定最大記憶體數) 64m -vv(除錯資訊和錯誤資訊輸出到控制台)-u(指定使用者) root  -d(作為daemon在後台啟動)

-n  45指定chunk size 實際的chunksize = 大於等於(45+48(item 結構體的大小,64位機器為48,32位機器為32,這裡用64位機器舉例))且能除盡8 的最小那個數,93 不行,94 不行,95不行,96可以,於是就是96

想要終止memcached,使用ps -aux|grep memcached 查詢程序號,然後使用kill命令殺死程序

memcached 記憶體儲存:使用slab alloction機制

slab 

page(預設為1m)

chunk

乙個slab class 可以由多個page組成

每個slab class 中有大小相同的chunk空間用於儲存鍵值對資料

slab alloction的實現機制的缺點:不能充分利用記憶體的空間,選中的chunk多數時候都比要儲存的資料要大,所以會造成浪費

優點:不容易產生記憶體碎片

memcached還有其他的一些常用的命令如下:

-p 監聽的埠 

-l 連線的ip位址, 預設是本機 

-d start 啟動memcached服務 

-d restart 重起memcached服務 

-d stop|shutdown 關閉正在執行的memcached服務 

-d install 安裝memcached服務 

-d uninstall 解除安裝memcached服務 

-u 以的身份執行 (僅在以root執行的時候有效) 

-m 最大記憶體使用,單位mb。預設64mb 

-m 記憶體耗盡時返回錯誤,而不是刪除項 

-c 最大同時連線數,預設是1024 

-f 塊大小增長因子,預設是1.25 

-n 最小分配空間,key+value+flags預設是48 

-h 顯示幫助 

1.1 memcached配置

memcached伺服器在啟動時需要對關鍵的引數進行配置,下面我們就看一看memcached在啟動時需要設定哪些關鍵引數以及這些引數的作用。

1)-p memcached的tcp監聽埠,預設配置為11211;

2)-u memcached的udp監聽埠,預設配置為11211,為0時表示關閉udp監聽;

3)-s memcached監聽的unix套接字路徑;

4)-a 訪問unix套接字的八進位制掩碼,預設配置為0700;

5)-l 監聽的伺服器ip位址,預設為所有網絡卡;

6)-d 為memcached伺服器啟動守護程序;

7)-r 最大core檔案大小;

8)-u 執行memcached的使用者,如果當前為root的話需要使用此引數指定使用者;

9)-m 分配給memcached使用的記憶體數量,單位是mb;

10)-m 指示memcached在記憶體用光的時候返回錯誤而不是使用lru演算法移除資料記錄;

11)-c 最大併發連數,預設配置為1024;

12)-v –vv –vvv 設定伺服器端列印的訊息的詳細程度,其中-v僅列印錯誤和警告資訊,-vv在-v的基礎上還會列印客戶端的命令和相應,-vvv在-vv的基礎上還會列印記憶體狀態轉換資訊;

13)-f 用於設定chunk大小的遞增因子;

14)-n 最小的chunk大小,預設配置為48個位元組;

15)-t memcached伺服器使用的執行緒數,預設配置為4個;

16)-l 嘗試使用大記憶體頁;

17)-r 每個事件的最大請求數,預設配置為20個;

18)-c 禁用cas,cas模式會帶來8個位元組的冗餘;

memcached的一致性hash演算法(平衡性,單調性,分散性,負載)

它的最終目的是實現在移除、新增乙個cache機器時對已經存在的key對映關係的影響能夠盡可能的降到最小。

如果存在slab class1:chunk=80bytes,slab class2:chunk=160bytes,slab class3:chunk=240bytes,如果slab class3 chunk被佔滿了,下乙個資料還是選擇了slab class3,首先memcached會嘗試給該slab class3再分配乙個page,但是如果分配失敗了,就會在這個slab class裡面執行lru,將新資料存入,即使是slab class1,2都是空的也會這樣做。

chunk 裡面包含了乙個item ,item裡面為 item結構體(固定的,32位系統為32byte,64位系統為48byte)+key+value

◎memcached的理論引數計算方式

影響 memcached 工作的幾個引數有:

常量realtime_maxdelta 60*60*24*30

最大30天的過期時間

conn_init()中的freetotal(=200)

最大同時連線數

常量key_max_length 250

最大鍵長

settings.factor(=1.25)

factor將影響chunk的步進大小

settings.maxconns(=1024)

最大軟連線

settings.chunk_size(=48)

乙個保守估計的key+value長度,用來生成id1中的chunk長度(1.2)。id1的chunk長度等於這個數值加上item結構體的長度(32),即預設的80位元組。

常量power_smallest 1

最小classid(1.2)

常量power_largest 200

最大classid(1.2)

常量power_block 1048576

預設slab大小

常量chunk_align_bytes (sizeof(void *))

保證chunk大小是這個數值的整數倍,防止越界(void *的長度在不同系統上不一樣,在標準32位系統上是4)

常量item_update_interval 60

佇列重新整理間隔

常量largest_id 255

最大item鍊錶數(這個值不能比最大的classid小)

變數hashpower(在1.1中是常量hashpower)

決定hashtable的大小

根據上面介紹的內容及引數設定,可以計算出的一些結果:

1、在memcached中可以儲存的item個數是沒有軟體上限的,之前我的100萬的說法是錯誤的。

2、假設newhash演算法碰撞均勻,查詢item的迴圈次數是item總數除以hashtable大小(由hashpower決定),是線性的。

3、memcached限制了可以接受的最大item是1mb,大於1mb的資料不予理會。

4、memcached的空間利用率和資料特性有很大的關係,又與dont_prealloc_slabs常量有關。 在最差情況下,有198個slab會被浪費(所有item都集中在乙個slab中,199個id全部分配滿)。

儲存:儲存的資料的key+value的長度找到合適的slabs,如果沒有空間則分配新page,如果沒有page了則使用lru置換舊資料,然後儲存到相應位置

查詢:儲存的key+value 長度找到合適的slabs,然後遍歷slabs上面的元素,直到找到,感覺有點像hashmap。

如果要用到分布式,需在客戶端使用分布式演算法定位到對應的memcached伺服器,然後再執行上面步驟,一般使用一致性hash演算法。

linux memcached相關命令

telnet localhost 200001 登陸 stats 檢視狀態 flush all 清理 quit 退出 echo flush all nc localhost 200001 1 資料儲存 假設key為test,value為12345 printf set test 0 0 5 r n1...

linux memcached開機啟動

方法一 在 etc rc.d rc.local 加入以下 usr local memcached bin memcached u root d m 2048 l 192.168.70.1 p 11211 p tmp memcached.pid 所有機器都能訪問 usr local memcached...

linux memcached狀態查詢

linux memcached狀態查詢 如何檢視memcache伺服器端版本 memcached h memcache的執行狀態可以方便的用 stats 命令顯示。首先用telnet 127.0.0.1 11211這樣的命令連線上memcache,然後直接輸入stats就可以得到當前memcache...