Memcached是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。
Memcached基于一個存儲鍵/值對的hashmap。其守護進程(daemon)是用C寫的,但是客戶端可以用任何語言來編寫,并通過memcached協議與守護進程通信。
存儲方式:
為了提高性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。由于數據僅存在于內存中,因此重啟memcached、重啟操作系統會導致全部數據消失。另外,內容容量達到指定值之后,就基于LRU(LeastRecentlyUsed)算法自動刪除不使用的緩存。memcached本身是為緩存而設計的服務器,因此并沒有過多考慮數據的永久性問題。
使用技巧:
許多語言都實現了連接memcached的客戶端,其中以Perl、php為主。
一、這里介紹windows環境的安裝。
1、下載memcache的windows穩定版,解壓放某個盤下面,比如在c:/memcached
2、在cmd下輸入'c:/memcached/memcached.exe-dinstall'安裝
3、再輸入:'c:/memcached/memcached.exe-dstart'啟動。
以后memcached將作為windows的一個服務每次開機時自動啟動。這樣服務器端已經安裝完畢了。
4、很簡單。不過還沒完,你只是安裝了一個memcachedcachingserver,還沒有和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-yinstallmemcached
設置為開機啟動 chkconfig--level2345memcachedon
啟動和停止 /etc/init.d/memcachedstart|stop
補充:如果安裝缺少其他支持,可以:
yumgroupinstall"DevelopmentTools"
常用操作
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::replaceR對一個已有的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采用BerkeleyDB作為持久存儲組件,故很多BerkeleyDB的特性的他都支持。
我們是站在巨人的肩膀上的。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沒有關系,兩者作用是不一樣的,沒有聯系的。
新聞熱點
疑難解答