特性
- 單個item 最大的數據 1M
- 單進程最大的使用內存 2G ,須要更多內存時可開多個端口
- memcached 是多線程,非阻塞io複用的網絡模型,redis 是單線程
- 鍵長最大250字節
常見的運用場景
- memcached來保持session,實現session共享(session跨服務器的一種解決方案)
內存管理機制(默認是使用Slab Allocatoion機制分配、管理內存)
- 將內存分割成各類尺寸的塊(chunk),並把尺寸相同的塊分紅組(chunk的集合)
- page 是分配Slab的內存空間 默認是1M 根據Slab大小切分紅chunk
- chunk:用戶緩存記錄的內存空間
- Slab class:特定chunk的組
![圖片描述 圖片描述](http://static.javashuo.com/static/loading.gif)
解釋壓縮
注:php 官網的memcache 擴展的最新幾個版本,當value好像是大於20k時(具體數值待驗證),會自動壓縮,嘗試過壓縮後有亂碼狀況,嘗試使用1。1版本的不會自動壓縮的狀況php
//
set($this->_key($key), $value, MEMCACHE_COMPRESSED, $ttl);
MEMCACHE_COMPRESSED爲壓縮選項縮後數據通常爲原數據大小的30%左右,節省了70%的傳輸性能消耗所得會大於文件壓縮帶來的性能損耗;存的數據的確有大於幾百字節的,若是都是小於100字節的鍵值對,壓縮可能反而帶來膨脹,Memcached中都是按照固定大小分塊存儲的,最小也要88 B。因此對於太小數據帶來的壓縮膨脹並非太大的問題;redis
item 屬性
- time 最近訪問時間
- exptime 到期時間
- nsuffix - (length of flags-and-length string)
- it_flags; // ITEM_* above
- slabs_clsid; // which slab class we're in
- nkey; // key length, w/terminating null and padding 密鑰長度,W /終止null填充
- next - 指針
- prev - 指針
- h_next
- nlbytes
- refcount
- data
item的數據 4部分緩存
- cas(可選) - 版本號
- key
- suffix
- value