Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。
Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。
存儲方式:
為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由於數據僅存在於內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此並沒有過多考慮數據的永久性問題。
使用技巧:
許多語言都實現了連接memcached的客戶端,其中以Perl、PHP為主。
一、這裡介紹windows環境的安裝。
1、下載memcache的windows穩定版,解壓放某個盤下面,比如在c:\memcached
2、在cmd下輸入 'c:\memcached\memcached.exe -d install' 安裝
3、再輸入: 'c:\memcached\memcached.exe -d start' 啟動。
以後memcached將作為windows的一個服務每次開機時自動啟動。這樣服務器端已經安裝完畢了。
4、很簡單。不過還沒完,你只是安裝了一個memcached caching server,還沒有和php建立關聯。所以在php程序裡還不能運用。
由於我的php版本是5.2.17的,下載的php_memcache.dll也要是對應的。如果你的php是5.3+的,可以在這裡下載
php_memcache-cvs-20090703-5.3-nts-VC6-x86.zip
安裝與平時添加擴展完全一樣,把dll文件拷到你的php目錄的ext目錄下,然後,
在php.ini中添加extension=php_memcache.dll,重啟服務器,在phpinfo裡面就應該可以看到配置信息。
二、CentOS 下的安裝
安裝 yum -y install memcached
設置為開機啟動 chkconfig --level 2345 memcached on
啟動和停止 /etc/init.d/memcached start|stop
補充:如果安裝缺少其他支持,可以:
yum groupinstall "Development Tools"
常用操作
Memcache::add 添加一個值,如果已經存在,則返回false
Memcache::addServer 添加一個可供使用的服務器地址
Memcache::close 關閉一個Memcache對象
Memcache::connect 創建一個Memcache對象
Memcache::debug 控制調試功能
Memcache::decrement 對保存的某個key中的值進行減法操作
Memcache::delete 刪除一個key值
Memcache::flush 清除所有緩存的數據
Memcache::get 獲取一個key值
Memcache::getExtendedStats 獲取進程池中所有進程的運行系統統計
Memcache::getServerStatus 獲取運行服務器的參數
Memcache::getStats 返回服務器的一些運行統計信息
Memcache::getVersion 返回運行的Memcache的版本信息
Memcache::increment 對保存的某個key中的值進行加法操作
Memcache::pconnect 創建一個Memcache的持久連接對象
Memcache::replace R對一個已有的key進行覆寫操作
Memcache::set 添加一個值,如果已經存在,則覆寫
Memcache::setCompressThreshold 對大於某一大小的數據進行壓縮
Memcache::setServerParams 在運行時修改服務器的參數
<?php //連接Memcache $mem = new Memcache; $mem->connect("localhost", 11211); //保存數據 $mem->set('key1', 'This is first value', 0, 60); $val = $mem->get('key1'); echo "Get key1 value: " . $val ."<br>"; //替換數據 $mem->replace('key1', 'This is replace value', 0, 60); $val = $mem->get('key1'); echo "Get key1 value: " . $val . "<br>"; //保存數組數據 $arr = array('aaa', 'bbb', 'ccc', 'ddd'); $mem->set('key2', $arr, 0, 60); $val2 = $mem->get('key2'); echo "Get key2 value: "; print_r($val2); echo "<br>"; //刪除數據 $mem->delete('key1'); $val = $mem->get('key1'); echo "Get key1 value: " . $val . "<br>"; //清除所有數據 $mem->flush(); $val2 = $mem->get('key2'); echo "Get key2 value: "; print_r($val2); echo "<br>"; //關閉連接 $mem->close(); ?>
memcached 的工作原理:
首先 memcached 是以守護程序方式運行於一個或多個服務器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。
PHP 等客戶端在與 memcached 服務建立連接之後,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內存中的,並不是保存在 cache 文件中的,這也是為什麼 memcached 能夠如此高效快速的原因。注意,這些對象並不是持久的,服務停止之後,裡邊的數據就會丟失。
memcachedb:
MemcacheDB是一個分布式、key-value形式的持久存儲系統。它不是一個緩存組件,而是一個基於對象存取的、可靠的、快速的持久存儲引擎。協議跟memcache一致(不完整),所以很多memcached客戶端都可以跟它連接。MemcacheDB采用Berkeley DB作為持久存儲組件,故很多Berkeley DB的特性的他都支持。
我們是站在巨人的肩膀上的。MemcacheDB的前端緩存是Memcached
前端:memcached的網絡層
後端:BerkeleyDB存儲
memcached和smarty的關系及區別是什麼啊?
Memcache是一個高性能的分布式的內存對象緩存系統,把緩存記錄到內存的系統.。
例如,從數據庫中獲取列表顯示,但並不想每次都讀取數據庫,這樣就需要用到緩存,而memcache就是其中的一種,它是把記錄保存在內存中使用
例如要重db獲取數據顯示出來, db -> memcache -> client
首先先判斷memcache有沒有數據,如果沒有則讀取DB,然後把db獲取到的記錄保存在memcache
下次再需要讀取記錄時,就可以直接在memcache中讀取,這樣就可以分擔數據庫的負擔,而且速度快很多。
Smarty是一個使用PHP寫出來的模板引擎,目的就是要使PHP程序員同前端人員分離,使程序員改變程序的邏輯內容不會影響到前端人員的頁面設計。
smarty是運行在MVC結構的view中。
例如 php 我們要顯示一個變量,需要這樣寫 echo $a;
而用smarty則需要這樣寫 {$a} ,經過編譯後,會自動顯示出 echo $a;,是一樣的,smarty中的緩存,php要運行後,才可以輸出到浏覽器,php運行生成html輸出是需要運算的,而smarty則會把之前運行過的php生成後的html保存起來,如果再調用這個php則會直接輸出之前的html.起到緩存作用。
memcache 和 smarty沒有關系,兩者作用是不一樣的,沒有聯系的。