memcached 是什麼 特點 協議簡單 基於 libevent 的事件處理 內置記憶體存儲方式 memcached 不互相通信的分散式 啟動 安裝 依賴 libevent 安裝命令 下載地址在這個網址上面找: "https://memcached.org/downloads" 啟動 啟動命令 $ ...
memcached
是什麼
特點
協議簡單
基於 libevent 的事件處理
內置記憶體存儲方式
memcached 不互相通信的分散式
啟動
安裝
依賴
- libevent
- 安裝命令 下載地址在這個網址上面找: https://memcached.org/downloads
$ wget 下載地址
$ tar zxf memcached-版本號.tar.gz
$ cd memcached-版本號.tar.gz
$ ./configure
$ make
$ sudo make install
啟動
啟動命令 $ /usr/local/bin/memcached -p 11211 m 64m -d
-d 後臺運行 -m 運行的最大記憶體大小 -p 使用 tcp 埠預設為11211 -vv very verbose
基本命令
保存命令
add replace set
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
可視化監控後臺
pecl 的 memcached.php
memAdmin 後臺 https://github.com/junstor/memadmin
刪除機制
不過渡清除
不會釋放已分配的記憶體
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