PHP中的資料庫二、memcache

來源:互聯網
上載者:User

標籤:

在一個高並發的web應用中,資料庫存取瓶頸一直是個大問題,一旦達到某個極限,資料庫很容易崩潰,但是如果我們把常用的資料放到記憶體中,在需要的時候從記憶體中取,不光讀取速度快,而且節約資料庫IO。

memcache簡介

Memcache是一個高效能的分布式的記憶體對象緩衝系統,通過在記憶體裡維護一個統一的巨大的hash表,它能夠用來儲存各種格式的資料,包括映像、視頻、檔案以及資料庫檢索的結果等。簡單的說就是將資料調用到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。

memcache的mem是記憶體(memory),cache是緩衝,結合是記憶體緩衝的意思。我們應用memcache時,讀取資料先從memcache內讀取,若尋找不到再去資料庫裡尋找,並將資料存入memcache,待下次尋找時便能輕易找到。

需要注意:

  • memcache是記憶體型的資料庫 ,因為記憶體的關閉釋放的特性,memcache也無法持久化儲存內容;
  • memcache內部是分Block Storage,所以大於1M的資料也無法儲存。
  • memcache依賴libevent庫,安裝前需確認已經安裝了libevent庫。
  • memcache是一個輕量級的記憶體型資料庫,只支援key-value型的儲存。
  • memcache中沒有關於使用者,密碼的設定,所以在配置時要配置防火牆的連接埠限制串連,以達到安全的目的。
  • 使用repcached也能輕易實現memcache的單master單slave主從複製。
memcache的應用情境
  • 儲存大量不需要持久儲存或資料庫內已存在不會變動的資料。
  • 讀取資料非常頻繁資料,要求小於1M。
  • 資料類型簡單的key-value型資料。
  • 計算好的結果和渲染後的網頁模板檔案。
  • 因其原子遞增性,可以用來計數。
  • 因為可以設定資料到期時間的特性,儲存期限資料。不過需要注意,memcache會在分配的記憶體不足時以最近最少使用原則(LRU)重用記憶體,可能會導致資訊提前被刪除。
  • 用memcache儲存session資訊,以達到多伺服器session共用。需要配置:php.ini:
session.save_handler = memcache //設定session的儲存方式為memcache memcache.hash_strategy = "consistent"//設定memcache的hash演算法為一致性雜湊演算法。 session.save_path = "tcp:/ip:port" //設定session儲存的位置,多台memcache用逗號隔開。
memcache伺服器的安裝

memcache的安裝簡單,伺服器可以在其官網http://www.memcached.org/下載,解壓後在其目錄下運行./configure -prefix=/path編譯,然後make / make test / make install 得到可以直接執行的二進位檔案。

使用./memcached命令即可開啟伺服器,其常用參數如下:

  • -p port 監聽連接埠 (預設: 11211)
  • -d 以後台方式運行Memcached
  • -u username 運行Memcached的賬戶
  • -m n 最大的記憶體使用量, 單位是MB,預設 64 MB
  • -c connections 最大串連數量, 預設是 1024
memcache的常用命令

用memcache用戶端或telnet串連到memcache後,就可以對memcache進行操作了。

memcache資料結構簡單,所以命令列命令也很少,下面以一條常用命令來簡析一下命令格式:

add key flags expire_time length \r\n value

flags:是否壓縮/序列化,通常為0。

expire_time:從儲存後多久到期。以秒(s)為單位,最大為30天的長度,超過30天的長度被視為時間戳記表示"到什麼時候到期",若設為0表示永不到期。

length:value長度,輸入長度斷行符號之後,命令列會讀取你接下來輸入的length個字元。

set key flags expire_time length    //如果有值則覆蓋原值,沒有則新增,add在有值時會儲存失敗get key                             //擷取key的值replace key flags expire_time length// 替換一個已存在的keyappend/preappend key flags expire_time length// 給key的value後面/前面添加新內容。preappend key flags expire_time length      // 給key的value前面添加新內容。inc/dec key [n]                         //key的值遞增/遞減1/[n]delete key                              //刪除一個keyflush_all [n]                           //[在n秒後]刪除全部資料stats [options]                         //擷取memcache[有關某一項]的詳細資料
PHP的memcache擴充及應用

在https://pecl.php.net/index.php搜尋擷取到所需的memcache擴充包。

linux系統,直接挑選版本(推薦最新stable穩定版)下載,解壓後在解壓目錄下用phpize工具產生configure檔案,並用它安裝,安裝完成後在/php.ini中添加extension。具體可看我的博文linux下的PHP中的最後一節。

windows下要點選連結右邊的“windows logo DLL”連結,並在新開啟的頁面中,按照版本、32位/64位、安全執行緒/非安全執行緒來選擇自己所需要的擴充,具體選項可以在phpinfo();頁面看到。下載完成後,將其放入phppath/ext/目錄下,然後在php.ini中添加extension=php_memcacache.dll;重啟伺服器完成安裝。

在phpinfo()頁面中看到memcache擴充後,說明安裝成功,我們就可以在php指令碼中使用關於memcache的類函數庫了。

在手冊中我們可以找到許多關於php的memcache擴充的使用,以下是一個典型的memcache使用流程。

$m=new Memcache();$m->connect($host,$port);$m->add($key,$value[,flags,$expire_time]);$content=$m->get($key);$m->close();

這是一個簡單的memcache串連程式,在進行memcache分布式儲存時,還需要用到$memcache->addServer()向memcache叢集中添加伺服器。

此外,還有get(),set(),flush(),delete()等方法,用法都大同小異,在手冊上也能找得到,而且十分清晰。說到手冊,推薦一個我正在用的,很不錯。地址:http://pan.baidu.com/s/1mgCkvIo

如果您覺得本博文對您有協助,您可以推薦或關注我,如果您有什麼問題,可以在下方留言討論,謝謝。

PHP中的資料庫二、memcache

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.