Memcache是一個自由和開放源代碼、高性能、分配的內存對象緩存系統。用於加速動態web應用程序,減輕數據庫負載。它可以應對任意多個連接,使用非阻塞的網絡IO。由於它的工作機制是在內存中開闢一塊空間,然後建立一個Hash表,Memcached自管理這些Hash表。
Memcached又是什麼?
Memcache是該系統的項目名稱,Memcached是該系統的主程序文件(字母d可以理解爲daemon),以守護程序方式運行於一個或多個服務器中,隨時接受客戶端的連接操作,使用共享內存存取數據。
memcache做什麼用??
作爲緩存層,把一些數據存儲在內存中,以達到快速存取的目的。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度
特性和限制??
Memcached單進程在32位系統中最大使用內存爲2G,若在64位系統則沒有限制,這是由於32位系統限制單進程最多可使用2G內存。
memcached是鍵值一一對應,key默認最大不能超過128個字 節,value默認大小是1M
什麼樣的數據適合存在memcache中??
需要經常取,但是很少更新的數據,比如用戶信息,用戶只有在修改自己的信息時纔會更新數據庫,但是隻要登錄後訪問任何頁面都需要查詢用戶信息,這樣直接從memcache中取會更好
適用memcached的業務場景:
1)如果網站包含了訪問量很大的動態網頁,因而數據庫的負載將會很高。由於大部分數據庫請求都是讀操作,那麼memcached可以顯著地減小數據庫負載。
2)如果數據庫服務器的負載比較低但CPU使用率很高,這時可以緩存計算好的結果( computed objects )和渲染後的網頁模板(enderred templates)。
3)利用memcached可以緩存 session數據 、臨時數據以減少對他們的數據庫寫操作。
4)緩存一些很小但是被頻繁訪問的文件。
5)緩存Web 'services'(非IBM宣揚的Web Services,譯者注)或RSS feeds的結果.。
不適用memcached的業務場景:
1)緩存對象的大小大於1MB
Memcached本身就不是爲了處理龐大的多媒體(large media)和巨大的二進制塊(streaming huge blobs)而設計的。
2)key的長度大於250字符
3)虛擬主機不讓運行memcached服務
如果應用本身託管在低端的虛擬私有服務器上,像vmware, xen這類虛擬化技術並不適合運行memcached。Memcached需要接管和控制大塊的內存,如果memcached管理的內存被OS或 hypervisor交換出去,memcached的性能將大打折扣。
4)應用運行在不安全的環境中
Memcached爲提供任何安全策略,僅僅通過telnet就可以訪問到memcached。如果應用運行在共享的系統上,需要着重考慮安全問題。
5)業務本身需要的是持久化數據或者說需要的應該是database
怎麼用???
memcache客戶端(php)
PHP有兩個版本的memcache客戶端擴展:php memcache和php memcached。
php memcache獨立用php實現,是老客戶端,從我們實踐中已發現有多個問題,而且功能少,屬性也可設置的少;
http://pecl.php.net/package/memcache
php memcached是基於原生的c的libmemcached的擴展,更加完善,建議替換爲php memcached。
http://pecl.php.net/package/memcached
一致性hash算法
分佈式緩存設計核心點:在設計分佈式cache系統的時候,我們需要讓key的分佈均衡,並且在增加cache server後,cache的遷移做到最少
相關資料 :
http://blog.csdn.net/xinguan1267/article/details/7870308
https://blog.linuxeye.com/345.html