深刻理解Memcache

特性

  • 單個item 最大的數據 1M
  • 單進程最大的使用內存 2G ,須要更多內存時可開多個端口
  • memcached 是多線程,非阻塞io複用的網絡模型,redis 是單線程
  • 鍵長最大250字節

常見的運用場景

  • memcached來保持session,實現session共享(session跨服務器的一種解決方案)

內存管理機制(默認是使用Slab Allocatoion機制分配、管理內存)

  • 將內存分割成各類尺寸的塊(chunk),並把尺寸相同的塊分紅組(chunk的集合)
  • page 是分配Slab的內存空間 默認是1M 根據Slab大小切分紅chunk
  • chunk:用戶緩存記錄的內存空間
  • Slab class:特定chunk的組

圖片描述

解釋壓縮

注: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 屬性

  1. time 最近訪問時間
  2. exptime 到期時間
  3. nsuffix - (length of flags-and-length string)
  4. it_flags; // ITEM_* above
  5. slabs_clsid; // which slab class we're in
  6. nkey; // key length, w/terminating null and padding 密鑰長度,W /終止null填充
  7. next - 指針
  8. prev - 指針
  9. h_next
  10. nlbytes
  11. refcount
  12. data

item的數據 4部分緩存

  1. cas(可選) - 版本號
  2. key
  3. suffix
  4. value
相關文章
相關標籤/搜索