?
- Memcached是 分布式 的,也就是說它不是本地的。它基于網絡連接(當然它也可以使用localhost)方式完成服務,本身它是一個獨立于應用的程序或守護進程(Daemon方式)。
- Memcached使用 libevent 庫實現網絡連接服務。libevent是個程序庫,它將Linux的epoll、BSD類操作系統的kqueue等事件處理功能封裝成統一的接口。即使對服務器的連接數增加,也能發揮O(1)的性能。
- Memcached是“分布式”的內存對象緩存系統,那些不需要“分布”的,不需要共享的,或者干脆規模小到只有一臺服務器的應用,memcached不會帶來任何好處,相反還會拖慢系統效率,因為網絡連接同樣需要資源。它的實際瓶頸在于 網絡連接 。
- memcached使用內存管理數據,所以它是 易失 的,當服務器重啟,或者memcached進程中止,數據便會丟失,所以memcached不能用來持久保存數據。并且內容容量達到指定值之后,就基于 LRU (Least Recently Used)算法自動刪除不使用的緩存。?
- memcached盡管是“分布式”緩存服務器,但服務器端并沒有分布式功能。各個memcached不會互相通信以共享信息。完全取決于客戶端的實現來進行分布式。
-
Memcache的分布式算法:
-
根據余數計算分散
- 過程:先根據CRC32求哈希值,再根據server數量求余。
- 缺點:當添加或移除服務器時,緩存重組的代價相當巨大。
-
Consistent Hashing
- 過程:?首先求出memcached服務器(節點)的哈希值, 并將其配置到0~2 32 的圓(continuum)上。 然后用同樣的方法求出存儲數據的鍵的哈希值,并映射到圓上。 然后從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。 如果超過2 32 仍然找不到服務器,就會保存到第一臺memcached服務器上。
-
?虛擬節點
- 平衡性是指哈希的結果能夠盡可能分布到所有的緩沖中去,這樣可以使得所有的緩沖空間都得到利用。
- 虛擬節點(? virtual node?)是實際節點在? hash?空間的復制品(? replica?),一個實際節點對應了若干個“虛擬節點”,這個對應個數也成為“復制個數”,“虛擬節點”在? hash?空間中以? hash?值排列。
-
根據余數計算分散
?
http://www.ha97.com/4575.html ??Memcached原理深度分析詳解
http://blog.csdn.net/dato/article/details/1968663 ?Memcache 內存管理
http://kb.cnblogs.com/page/42732/ ? 理解Memcache的內存存儲
http://kb.cnblogs.com/page/42734/ ?Memcache的分布式算法
http://blog.csdn.net/sparkliang/article/details/5279393 ?一致性hash算法
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
