協議簡單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,而後將數據緩存於其中。
減小內存碎片
缺點
Growth Factor
控制 slab 之間的差別,默認值爲1.25 即 slab2 是 slab1 的 chunk 大小的 1.25 倍
在以前 slab 的默認值是2
telnet 主機名 端口號
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
pecl 的 memcached.php
memAdmin 後臺 https://github.com/junstor/memadmin
不會釋放已分配的內存
lazy expiration memcached 內部不會監視記錄是否過時,而是在 get 時查看記錄的時間戳,檢查記錄是否過時。
memcached 不會在過時監視上耗費 CPU 時間。
memcached 的分佈式徹底依賴客戶端的實現
Consistent Hashing 以下所示:
首先求出 memcached 服務器(節點)的哈希值,並將其配置到 0~2 32 的圓(continuum)上。而後用一樣的方法求出存儲數據的鍵的哈希值,並映射到圓上。而後從數 據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。若是超過 2 32 仍然找不到 服務器,就會保存到第一臺 memcached 服務器上。
php 庫: libketama