memcached

memcache和memcached 區別

看了很多比較的,這個最實在
1. 目前大多數php環境裏使用的都是不帶d的memcache版本,這個版本出的比較早,是一個原生版本,完全在php框架內開發的。與之對應的帶d的memcached是建立在libmemcached的基礎上,所以相對來說,memcached版本的功能更全一些。
2. Memcache是原生實現的,支持OO和非OO兩套接口並存。而memcached是使用libmemcached,只支持OO接口。
3. memcached還有個非常稱讚的地方,就是flag不是在操作的時候設置了,而是有了一個統一的setOption()。Memcached實現了更多的memcached協議。
4. memcached支持Binary Protocol,而memcache不支持。這意味着memcached會有更高的性能。不過memcached目前還不支持長連接

memcached的相關操作

見官方文檔

內存存儲原理簡述

  1. 目前的memcached採用塊(chunks),組(slab class),頁(page)的方式進行內存管理的,首先會默認分配1MB 給page,page根據不同的slap的個數,分成同樣大小的chunk。例如,設置page的大小是1MB,需要1000個slab,那麼每個chunk就是1000字節。(方便計算取進制1000)
    這裏寫圖片描述
  2. memecached收到數據大小,選擇最合適的slap,選擇其中空閒的一個chunk,存儲起來。
    這裏寫圖片描述

刪除數據

  1. 數據過期時,並沒真正的清空其存儲空間,而是在get時比較其時間戳,看是否已經過期。
  2. 當分配內存不足時,優先使用過期數據所佔內存,mem採用LRU算法來管理內存。

分佈式相關

  1. 取餘算法,對key進行hash之後,對memcached機器數取餘。將其值存儲到對應的機器上即可.僞代碼如下
            $nodes = [node1,node2,node3];
            $keys = [key1=>$value,key2=>$value,key3=>$value3];
            foreach($keys as $key) {
                $crc = crc32($key);
                $mod = $crc % count($nodes);
                $result = nodes[$mod].set($key,$keys[$key]);
            }    
  1. 一致性哈希算法,將每個節點,分配到一個循環的圓中。將值哈希之後,set到順時針最近的節點即可
    這裏寫圖片描述

詳細內容可查閱
http://share.weiyun.com/995338652c2b3ef5ad00a03bd7cf7b9c

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