1. 程式人生 > >分布式學習之緩存Memcached

分布式學習之緩存Memcached

原則 應用 main 數據庫 詳細 性問題 功能 過多 取數據

    Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。

memcached作為高速運行的分布式緩存服務器,具有以下的特點。
· 協議簡單,C++有底層庫支持

· 基於libevent的事件處理

· 內置內存存儲方式

· memcached不互相通信的分布式

· 不支持數據的持久化

· 不需要消耗過多的cpu資源

· LRU(最近最少使用原則)算法保持數據的新鮮度

· key-value形式存儲

事件處理
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的分布式。

例1

$ telnet localhost 11211
Trying 127.0.0.1
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]‘.
set foo 0 0 3 (保存命令)
bar (數據)
STORED (結果)
get foo (取得命令)
VALUE foo 0 3 (數據)
bar (數據)

例2

telnet 192.168.9.114 11212
set 13802883688liteEAddr_Uin 0 90000 7
3974062
STORED

分布式學習之緩存Memcached