memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 爲首開發的一款軟件。如今已成爲 mixi、 hatena、 Facebook、 Vox、LiveJournal等衆多服務中 提升Web應用擴展性的重要因素。算法
許多Web應用都將數據保存到RDBMS中,應用服務器從中讀取數據並在瀏覽器中顯示。 但隨着數據量的增大、訪問的集中,就會出現RDBMS的負擔加劇、數據庫響應惡化、 網站顯示延遲等重大影響。數據庫
這時就該memcached大顯身手了。memcached是高性能的分佈式內存緩存服務器。 通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、 提升可擴展性。瀏覽器
經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、 提升可擴展性。緩存
圖1 通常狀況下memcached的用途服務器
memcached做爲高速運行的分佈式緩存服務器,具備如下的特色。分佈式
協議簡單memcached
基於libevent的事件處理性能
內置內存存儲方式網站
memcached不互相通訊的分佈式spa
memcached的服務器客戶端通訊並不使用複雜的XML等格式, 而使用簡單的基於文本行的協議。所以,經過telnet 也能在memcached上保存數據、取得數據。
libevent是個程序庫,它將Linux的epoll、BSD類操做系統的kqueue等事件處理功能封裝成統一的接口。即便對服務器的鏈接數增長,也能發揮O(1)的性能。 memcached使用這個libevent庫,所以能在Linux、BSD、Solaris等操做系統上發揮其高性能。 關於事件處理這裏就再也不詳細介紹,能夠參考Dan Kegel的The C10K Problem。
爲了提升性能,memcached中保存的數據都存儲在memcached內置的內存存儲空間中。 因爲數據僅存在於內存中,所以重啓memcached、重啓操做系統會致使所有數據消失。 另外,內容容量達到指定值以後,就基於LRU(Least Recently Used)算法自動刪除不使用的緩存。 memcached自己是爲緩存而設計的服務器,所以並無過多考慮數據的永久性問題。
memcached儘管是「分佈式」緩存服務器,但服務器端並無分佈式功能。 各個memcached不會互相通訊以共享信息。那麼,怎樣進行分佈式呢? 這徹底取決於客戶端的實現。本連載也將介紹memcached的分佈式。