Lazy Expiration
memcached 內部不會監視記錄是否過時,而是在 get 時查看記錄的時間戳,檢查記錄是否過時。這
種技術被稱爲 lazy(惰性)expiration。所以,memcached 不會在過時監視上耗費 CPU 時間。
LRU( Least Recently Used 最近少使用):算法
從緩存中有效刪除數據的原理
memcached 優先使用已超時的記錄的空間,但即便若是也會發生空間不夠用的狀況,這時就要用LRU策略進制進行空間分配
從最近未被使用的記錄中搜索,並將空間分配給新的記錄
指定 -M 參數禁用LRU,內存寫滿後會返回錯誤 memcached 畢竟不是存儲器,而是緩存,因此推薦使用 LRU緩存
分佈式算法: 服務器
memcached的分佈式算法是在客戶端實現的,當一個key肯定的時候也就肯定了他要存儲的mc節點
算法:crc32(key)/n key爲要緩存的鍵,n爲連接的服務器節點數
優勢:餘數計算的方法簡單,數據的分散性也至關優秀
缺點:當添加或移除服務器時,餘數就會產生鉅變,從而影響緩存的命中率。
解決方案:
一致性 hash 算法(Consistent Hashing)
首先計算出節點的hash值,分佈到 0~2^32的園上,而後用一樣的方法求出存儲數據的鍵的hash值,並映射到圓上
從映射位置開始順時針開始查找,首次遇到的服務器則爲要存儲的節點,若是超事後仍找不到則放到 第一臺節點上
採用這種算法,當增長或減小服務器時只有不多的部分key會受到影響
虛擬節點:當節點數很是少時,分佈會不均勻,能夠把節點放大幾百倍,而後一個節點對應多個虛擬虛擬解決,會達到一樣的效果
Memcached、Key-Value Store 、Bittorrent DHT、LVS中都採用了Consistent Hashing算法
http://blog.csdn.net/sparkliang/article/details/5279393分佈式
todomemcached