memcached 學習

memcached

是什麼

特色

  • 協議簡單php

  • 基於 libevent 的事件處理git

  • 內置內存存儲方式github

  • memcached 不互相通訊的分佈式緩存

啓動

安裝

$ wget 下載地址 
$ tar zxf memcached­-版本號.tar.gz  
$ cd memcached­-版本號.tar.gz  
$ ./configure  
$ make  
$ sudo make install

啓動

  • 啓動命令 $ /usr/local/bin/memcached -­p 11211 ­m 64m -dtcp

    -d 後臺運行 -m 運行的最大內存大小 -p 使用 tcp 端口默認爲11211 -vv very verbose分佈式

基本命令

保存命令

add replace setmemcached

  • add函數

  • replace工具

  • set

獲取數據

  • get

  • get_multi 獲取多個數據

刪除數據

delete

第二個參數表明延遲刪除的時間。

刪除第一個參數指定的鍵的數據。第二個參數指定一個時間值,能夠禁止使用一樣的鍵保存新數據。

set 函數會忽視這個時間

增一&減一

  • 原子操做

  • 不會自動賦值

  • 不會對

內部結構

內存分配機制

  • Slab Allocator

    • 分配的內存不會釋放

    • 術語

      • page 分配給 Slab 的內存空間,默認是 1MB。 分配給 Slab 以後根據 slab 的大小切分紅 chunk。

      • chunk 用於緩存記錄的內存空間。

      • slab class 特定大小的 chunk 的組。

  • memcached 如何選擇 slab memcached 根據收到的數據的大小,選擇最適合數據大小的 slab(圖 2.2)。

    memcached 中保存着 slab 內空閒 chunk 的列表,根據該列表選擇 chunk,而後將數據緩存於其中。

  • 減小內存碎片

  • 缺點

    • 沒法有效利用分配的內存 例如,將 100 字節 的數據緩存到 128 字節的 chunk 中,剩餘的 28 字節就浪費了。
  • Growth Factor

    • 控制 slab 之間的差別,默認值爲1.25 即 slab2 是 slab1 的 chunk 大小的 1.25 倍

      在以前 slab 的默認值是2

監控命令

鏈接

telnet 主機名 端口號

memcached-tool 使用

memcached-tool 10.0.0.5:11211 display # shows slabs

memcached-tool 10.0.0.5:11211 # same. (default is display) memcached-tool 10.0.0.5:11211 stats # shows general stats memcached-tool 10.0.0.5:11211 settings # shows settings stats memcached-tool 10.0.0.5:11211 sizes # shows sizes stats memcached-tool 10.0.0.5:11211 dump [limit] # dumps keys and values

  • 腳本如何得到 memcached 軟件包的 scripts 目錄中有一些工具,memcached-tool 也在其中 memcached-1.5.10/scripts

可視化監控後臺

刪除機制

不過渡清除

  • 不會釋放已分配的內存

  • lazy expiration memcached 內部不會監視記錄是否過時,而是在 get 時查看記錄的時間戳,檢查記錄是否過時。

    memcached 不會在過時監視上耗費 CPU 時間。

空間不足

  • LRU 指定「­M」參數啓動後,內存用盡時 memcached 會返回錯誤。話說回來,memcached 畢竟不是存儲 器,而是緩存,因此推薦使用 LRU。

分佈式

memcached 的分佈式徹底依賴客戶端的實現

餘數分散

一致性 hash

Consistent Hashing 以下所示:

首先求出 memcached 服務器(節點)的哈希值,並將其配置到 0~2 32 的圓(continuum)上。而後用一樣的方法求出存儲數據的鍵的哈希值,並映射到圓上。而後從數 據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。若是超過 2 32 仍然找不到 服務器,就會保存到第一臺 memcached 服務器上。

php 庫: libketama

image-20180910203215632

相關文章
相關標籤/搜索