memcache 內部原理實現

2021-09-06 15:00:18 字數 1054 閱讀 5325

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 因此查詢可能會比較慢。列表型別的使用相對來說比較簡單,對它的操作就相當操作乙個沒有任何 ...