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演算法
todo
Promise內部實現原理
promise內部實現原理 function promise fn this triggerresolve val 失敗函式處理 const reject val trycatch err promise.prototype onrejected typeof onrejected function...
Memcache原理分析
memcached是高效能的分布式記憶體快取伺服器。一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態web應用的速度 提高可擴充套件性。memcached使用libevent庫實現網路連線服務,理論上可以處理無限多的連線,但是它和apache不同,它更多的時候是面向穩定的持續...
列表使用與內部實現原理
列表型別 list 是乙個使用鍊錶結構儲存的有序結構,它的元素插入會按照先後順序儲存到鍊錶結構中,因此它的元素操作 插入 刪除 時間複雜度為 o 1 所以相對來說速度還是比較快的,但它的查詢時間複雜度為 o n 因此查詢可能會比較慢。列表型別的使用相對來說比較簡單,對它的操作就相當操作乙個沒有任何 ...