Memcache簡介

Memcache是什麼?

memcached是高性能的,分佈式的內存對象緩存系統,用於在動態應用中減少數據庫教程負載,提升訪問速度。

Memcache是danga.com的一個項目,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。它可以應對任意多個連接,使用非阻塞的網絡IO。由於它的工作機制是在內存中開闢一塊空間,然後建立一個HashTable,Memcached自管理這些HashTable。Memcache官方網站:http://www.danga.com/memcached,更多詳細的信息可以來這裏瞭解 關於Memcache和memcached 其實應該說這不是個問題,但網上有很多地方用着這兩個不同的單詞。Memcache是這個項目的名稱,Memcached是這個項目的主程序的文件名,就這麼簡單。 工作原理:

首先 memcached 是以守護程序方式運行於一個或多個服務器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客戶端在與 memcached 服務建立連接之後,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內存中的,並不是保存在 cache 文件中的,這也是爲什麼 memcached 能夠如此高效快速的原因。注意,這些對象並不是持久的,服務停止之後,裏邊的數據就會丟失。

與許多 cache 工具類似,Memcached 的原理並不複雜。它採用了C/S的模式,在 server 端啓動服務進程,在啓動時可以指定監聽的 ip,自己的端口號,所使用的內存大小等幾個關鍵參數。一旦啓動,服務就一直處於可用狀態。Memcached 的目前版本是通過C實現,採用了單進程,單線程,異步I/O,基於事件 (event_based) 的服務方式.使用 libevent 作爲事件通知實現。多個 Server 可以協同工作,但這些 Server 之間是沒有任何通訊聯繫的,每個 Server 只是對自己的數據進行管理。Client 端通過指定 Server 端的 ip 地址(通過域名應該也可以)。需要緩存的對象或數據是以 key->value 對的形式保存在Server端。key 的值通過 hash 進行轉換,根據 hash 值把 value 傳遞到對應的具體的某個 Server 上。當需要獲取對象數據時,也根據 key 進行。首先對 key 進行 hash,通過獲得的值可以確定它被保存在了哪臺 Server 上,然後再向該 Server 發出請求。Client 端只需要知道保存 hash(key) 的值在哪臺服務器上就可以了。

其實說到底,memcache 的工作就是在專門的機器的內存裏維護一張巨大的 hash 表,來存儲經常被讀寫的一些數組與文件,從而極大的提高網站的運行效率(當然花錢就是必不可免的事了,聽說 MySpace 的每臺 Cache 服務器都配備了至少 64G 的內存)



常用方法:

Memcache::add // 添加一個值,如果已經存在,則返回false Memcache::addServer // 添加Memcache地址 Memcache::close // 關閉一個Memcache的連接

Memcache::connect // 打開一個到Memcache的連接

Memcache::decrement // 對保存的某個key中的值進行減法操作 Memcache::delete // 刪除一個Memcache上的key值

Memcache::flush // 刷新所有Memcache上保存的項目(類似於刪除所有的保存的項目) Memcache::get // 從Memcache上獲取一個key值

Memcache::getExtendedStats // 獲取進程池中所有進程的運行系統 統計 Memcache::getServerStatus // 獲取運行服務器 的參數 Memcache::getStats //獲取當前Memcache服務器運行的狀態 Memcache::getVersion // 返回運行的Memcache的版本信息 Memcache::increment // 對保存的某個key中的值進行加法操作 Memcache::pconnect // 打開一個到Memcache的長連接

Memcache::replace // 替換一個已經存在Memcache服務器上的項目(功能 類似Memcache::set)

Memcache::set // 向Memcache添加一個值,如果已經存在,則覆寫 Memcache::setCompressThreshold // 對大於某一大小的數據進行壓縮 Memcache::setServerParams // 在運行時修改服務器的參數 用法實例:

$mem = new Memcache;

$mem->connect("127.0.0.1", 11211);

//Memcache::set方法有四個參數,第一個參數是key,第二個參數是value,第三個參數可選,表示是否壓縮保存,第四個參數可選,用來設置一個過期自動銷燬的時間 。 $mem->set('test','123',0,60);

//Memcache::add方法的作用和Memcache::set方法類似,區別是如果 Memcache::add方法的返回值爲false,表示這個key已經存在,而Memcache::set方法則會直接覆寫。 $mem->add('test','123',0,60);

//Memcache::get方法的作用是獲取一個key值,Memcache::get方法有一個參數,表示key。 $mem->get('test');//輸出爲'123'

//Memcache::replace 方法的作用是對一個已有的key進行覆寫操作,Memcache::replace方法有四個參數,作用和Memcache::set方法的相同。 $mem->replace('test','456',0,60);

//Memcache::delete方法的作用是刪除一個key值,Memcache::delete方法有兩個參數,第一個參數表示key,第二個參數可選,表示刪除延遲的時間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章