memcache

1)暫且不考慮使用什麼樣的數據庫,實現事務(ACID,Atomicity, Consistency, Isolation, and Durability)需要大量開銷,特別當使用到硬盤的時候,這就意味着查詢可能會阻塞。當使用不包含事務的數據庫(例如Mysql-MyISAM),上面的開銷不存在,但讀線程又可能會被寫線程阻塞。


2)Mysql查詢緩存不是很理想,因爲以下幾點:

當指定的表發生更新後,查詢緩存會被清空。在一個大負載的系統上這樣的事情發生的非常頻繁,導致查詢緩存效率非常低,有的情況下甚至還不如不開,因爲它對cache的管理還是會有開銷。在32位機器上,Mysql對內存的操作還是被限制在4G以內,但memcached可以分佈開,內存規模理論上不受限制。Mysql上的是查詢緩存,而不是對象緩存,如果在查詢後還需要大量其它操作,查詢緩存就幫不上忙了。

3)最初的緩存做法是在線程內對對象進行緩存,但這樣進程間就無法共享緩存,命中率非常低,導致緩存效率極低。後來出現了共享內存的緩存,多個進程或者線程共享同一塊緩存,但畢竟還是隻能侷限在一臺機器上,多臺機器做相同的緩存同樣是一種資源的浪費,而且命中率也比較低。

Memcached非常快,它使用libevent,可以應付任意數量打開的連接(使用epoll,而非poll),使用非阻塞網絡IO,分佈式散列對象到不同的服務器,查詢複雜度是O(1)
emcached Server和Clients共同工作,實現跨服務器分佈式的全局的緩存。並且可以與Web Server共同工作,WebServer對CPU要求高,對內存要求低,Memcached Server對CPU要求低,對內存要求高,所以可以搭配使用。

啓動一個佔用2G內存的進程,並打開11211端口用於接收請求。由於32位系統只能處理4G內存的尋址,所以在大於4G內存使用PAE的32位服務器上可以運行2-3個進程,並在不同端口進行監聽。[傳統的IA32架構只有32位地址總線,只能讓系統容納不超過4GB的內存,這麼大的內存,對於普通的桌面應用應該說是足夠用了。可是,對於服務器應用來說,還是顯得不足,因爲服務器上可能承載了很多同時運行的應用。PAE技術將地址擴展到了36位,這樣,系統就能夠容納2^36=64GB的內存]


$memcache->setCompressThreshold(2000, 0.2);
MEMCACHE_COMPRESSED

memcached-tool localhost
memcached-tool localhost move 14 6
memcache pecl中,新增了一個memcache.php
$all = $memcache->get(array('key1', 'key2', 'key3'));
get_multi
memcache有1m限制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章