MemCache memcache是一套分散式的高速緩存系統。目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效果十分顯著,是一套開放源代碼軟體。 工作流程 MemCache的工作流程如下:先檢查客戶端的請求數據是否在memcached中,如有,直接把 ...
MemCache
memcache是一套分散式的高速緩存系統。目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問資料庫的網站訪問速度提升效果十分顯著,是一套開放源代碼軟體。
工作流程
MemCache的工作流程如下:先檢查客戶端的請求數據是否在memcached中,如有,直接把請求數據返回,不再對資料庫進行任何操作;如果請 求的數據不在memcached中,就去查資料庫,把從資料庫中獲取的數據返回給客戶端,同時把數據緩存一份到memcached中(memcached客戶端 不負責,需要程式明確實現);每次更新資料庫的同時更新memcached中的數據,保證一致性;當分配給memcached記憶體空間用完之後,會使用 LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效數據首先被替換,然後再替換掉最近未使用的數據。
Memcache是一個高性能的分散式的記憶體對象緩存系統,通過在記憶體里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖 像、視頻、文件以及資料庫檢索的結果等。簡單的說就是將數據調用到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。Memcached是以守護程式(監聽)方式運行於一個或多個伺服器中,隨時會接收客戶端的連接和操作。
特性和限制
- 在 Memcached中可以保存的item數據量是沒有限制的,只要記憶體足夠 。
- Memcached單進程在32位系統中最大使用記憶體為2G,若在64位系統則沒有限制,這是由於32位系統限制單進程最多可使用2G記憶體,要使用更多記憶體,可以分多個埠開啟多個Memcached進程 。
- 最大30天的數據過期時間,設置為永久的也會在這個時間過期,常量REALTIME_MAXDELTA 60*60*24*30控制
- 最大鍵長為250位元組,大於該長度無法存儲,常量KEY_MAX_LENGTH 250控制
- 單個item最大數據是1MB,超過1MB數據不予存儲,常量POWER_BLOCK 1048576進行控制,它是預設的slab大小
- 最大同時連接數是200,通過 conn_init()中的freetotal進行控制,最大軟連接數是1024,通過 settings.maxconns=1024 進行控制
- 跟空間占用相關的參數:settings.factor=1.25, settings.chunk_size=48, 影響slab的數據占用和步進方式
- memcached是一種無阻塞的socket通信方式服務,基於libevent庫,由於無阻塞通信,對記憶體讀寫速度非常之快。
- memcached分伺服器端和客戶端,可以配置多個伺服器端和客戶端,應用於分散式的服務非常廣泛。
- memcached作為小規模的數據分散式平臺是十分有效果的。
- memcached是鍵值一一對應,key預設最大不能超過128個字 節,value預設大小是1M,也就是一個slabs,如果要存2M的值(連續的),不能用兩個slabs,因為兩個slabs不是連續的,無法在記憶體中 存儲,故需要修改slabs的大小,多個key和value進行存儲時,即使這個slabs沒有利用完,那麼也不會存放別的數據。
- memcached已經可以支持C/C++、Perl、PHP、Python、Ruby、Java、C#、Postgres、Chicken Scheme、Lua、MySQL和Protocol等語言客戶端
介面介紹
Memcache客戶端包含兩組介面,一組是面向過程的介面,一組是面向對象的介面,具體可以參考PHP手冊
MemCache“LXXV. Memcache Functions” 這章。
Memcache面向對象的常用介面包括:
Memcache::connect -- 打開一個到Memcache的連接
Memcache::pconnect -- 打開一個到Memcache的長連接
Memcache::close -- 關閉一個Memcache的連接
Memcache::set -- 保存數據到Memcache伺服器上
Memcache::get --提取一個保存在Memcache伺服器上的數據
Memcache::replace --替換一個已經存在Memcache伺服器上的項目(功能類似Memcache::set)
Memcache::delete -- 從Memcache伺服器上刪除一個保存的項目
Memcache::flush -- 刷新所有Memcache伺服器上保存的項目(類似於刪除所有的保存的項目)
Memcache::getStats -- 獲取當前Memcache伺服器運行的狀態
應用
使用Memcache的網站一般流量都是比較大的,為了緩解資料庫的壓力,讓Memcache作為一個緩存區域,把部分信息保存在記憶體中,在前端能夠迅速的進行存取。那麼一般的焦點就是集中在如何分擔資料庫壓力和進行分散式,畢竟單台Memcache的記憶體容量的有限的。