1、Memcached簡介算法
memcached是高性能的分佈式內存緩存服務器。它經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。與其相似常見的還有Redis。Memcached基於一個存儲鍵/值(K/V)對的hashmap。客戶端能夠用任何語言來編寫,並經過memcached協議與守護進程通訊。數據庫
memcached的API使用32位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不一樣的機器上。當表格滿了之後,接下來新增的資料會以LRU機制替換掉。緩存
2、Memcached的分佈式算法服務器
一、餘數哈希(餘數計算分散):數據結構
原理:根據服務器臺數的餘數進行分散:先求得鍵(key)的整數哈希值( int hashCode ),經過Hash函數把key轉化成整數後,再用這個哈希值除以服務器臺數,根據餘數選擇服務器。多線程
舉例:總共10臺服務器(編號爲0~9),先獲取數據的key的整數哈希值:hashCode=hash(key)=13 ,而後除以服務器總檯數,mod 10(13%10)=3,即選擇編號爲3的服務器進行存儲。分佈式
缺點:當添加或減小服務器後要進行重哈希,這樣會致使原來的服務器序號變了,則可能出現求得的餘數也改變,致使Memcached命中率降低,致使更多地訪問數據庫服務器去調數據,增長了數據庫服務器的負載。memcached
二、一致性哈希:函數
原理:性能
容錯性:對下圖,當Server3服務器故障時,數據的存儲指示D發生了改變,存放在了Server2上邊。系統的存儲數據變化最少(由於是數據是順時針尋找服務器存儲,因此D位置數據找到的是Server2服務器)
擴展性:假設增長服務器Server4,按規則放在BC中間,那麼只是B存儲在Server4上邊了,總體的影響只是發生在了新增節點的區間部分。
3、Memcached的數據清除算法
4、工做流程
5、Memcached 和 Redis的區別?
一、數據存儲位置:Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。而Memecache把數據所有存在內存之中;
二、速度上:Redis的速度比memcached快不少;
三、多線程:Memcached支持多線程,而Redis使用單線程的IO複用模型;
四、支持的數據類型:Memcached僅支持簡單的數據類型,想要存入複雜的數據類型必須把複雜的數據類型轉變成簡單的數據類型。Redis不只僅支持簡單的k/v類型的數據,同時還提供string(字符串)、list(鏈表)、set(集合)、zset(sortedset --有序集合)和hash(哈希類型)等數據結構的存儲。