Memcached 特點(diǎn)
協(xié)議
memcached的服務(wù)器客戶端通信并不使用復(fù)雜的XML等格式,而使用簡單的基于文本行的協(xié)議。
因此,通過telnet也能在memcached上保存數(shù)據(jù)、取得數(shù)據(jù)。下面是例子。
$ 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 (數(shù)據(jù))
STORED (結(jié)果)
get foo (取得命令)
VALUE foo 0 3 (數(shù)據(jù))
bar (數(shù)據(jù))
事件處理
libevent是個程序庫,它將Linux的epoll、BSD類操作系統(tǒng)的kqueue等事件處理功能封裝成統(tǒng)一的接口。即使對服務(wù)器的連接數(shù)增加,也能發(fā)揮O(1)的性能。memcached使用這個libevent庫,因此能在Linux、BSD、Solaris等操作系統(tǒng)上發(fā)揮其高性能。關(guān)于事件處理這里就不再詳細(xì)介紹,可以參考Dan Kegel的The C10K Problem。
存儲方式
為了提高性能,memcached中保存的數(shù)據(jù)都存儲在memcached內(nèi)置的內(nèi)存存儲空間中。由于數(shù)據(jù)僅存在于內(nèi)存中,因此重啟memcached、重啟操作系統(tǒng)會導(dǎo)致全部數(shù)據(jù)消失。另外,內(nèi)容容量達(dá)到指定值之后,就基于LRU(Least Recently Used)算法自動刪除不使用的緩存。memcached本身是為緩存而設(shè)計的服務(wù)器,因此并沒有過多考慮數(shù)據(jù)的永久性問題。
通信分布式
memcached盡管是“分布式”緩存服務(wù)器,但服務(wù)器端并沒有分布式功能。各個memcached不會互相通信以共享信息。那么,怎樣進(jìn)行分布式呢?這完全取決于客戶端的實現(xiàn)。本文也將介紹memcached的分布式。
Memcached 功能
服務(wù)器參數(shù)監(jiān)控:STATS、SETTINGS、ITEMS、SLABS、SIZES實時刷新
服務(wù)器性能監(jiān)控:GET、DELETE、INCR、DECR、CAS等常用操作命中率實時監(jiān)控
支持?jǐn)?shù)據(jù)遍歷,方便對存儲內(nèi)容進(jìn)行監(jiān)視
支持條件查詢,篩選出滿足條件的KEY或VALUE
數(shù)組、JSON等序列化字符反序列顯示
兼容memcache協(xié)議的其他服務(wù),如Tokyo Tyrant (遍歷功能除外)
支持服務(wù)器連接池,多服務(wù)器管理切換方便簡潔