Memcached原理分析
Memcached的內存管理方式
Memcached采用了名為Slab Allocation的機制分配,管理內存。
Slab Allocation的原理相當簡單。將分配的內存分割成各種尺寸的塊(chucnk),并把尺寸相同的塊分成組(chucnk的集合)如圖:
而且slab Allocation還有重復使用已分配內存的目的。也就是說,分配到的內存不會釋放,而是重復利用。
Slab Allocation 的主要術語
- Page :分配給Slab 的內存空間,默認是1MB。分配給Slab 之后根據slab 的大小切分成chunk.
- Chunk : 用于緩存記錄的內存空間。
- Slab Class:特定大小的chunk 的組。
?
在Slab 中緩存記錄的原理
Memcached根據收到的數據的大小,選擇最合適數據大小的Slab (圖2) memcached中保存著slab內空閑chunk的列表,根據該列表選擇chunk,然后將數據緩存于其中。
?
?
Memcached在數據過期與刪除
Memcached內部不會監視記錄是否過期,而是在get此條記錄時查看其時間戳,檢查記錄是否過期。這種技術稱為lazy expiration.因此memcached不會再過期監視上耗費CPU時間。
添加新數據時,Memcached會優先使用已超時的記錄空間,如果空間不足,此時就要使用名為Least Recently Used (LRU最近最少使用)機制來分配空間。因此當memcached的內存空間不足時(無法從slab class)獲取到新空間時,就從最近未使用的記錄中搜索,并將空間分配給新的記錄。
?
Memcached的分布式原理
Memcached是通過客戶端來實現分布式的,以新數據(鍵值對)的鍵通過一定的算法選擇一個服務器,保存在此服務器的Memcached中。
例如:
向memcached中添加“tokyo”。將“tokyo”傳給客戶端程序庫后,客戶端實現的算法就會根據“鍵”來決定保存數據的memcached服務器。服務器選定后,即命令它保存“tokyo”及其值。同樣,“kanagawa”“chiba”“saitama”“gunma”都是先選擇服務器再保存。接下來獲取保存的數據。獲取時也要將要獲取的鍵“tokyo”傳遞給函數庫。函數庫通過與數據保存時相同的算法,根據“鍵”選擇服務器。使用的算法相同,就能選中與保存時相同的服務器,然后發送get命令。只要數據沒有因為某些原因被刪除,就能獲得保存的值。
?
這樣,將不同的鍵保存到不同的服務器上,就實現了memcached的分布式。 memcached服務器增多后,鍵就會分散,即使一臺memcached服務器發生故障無法連接,也不會影響其他的緩存,系統依然能繼續運行。
轉載于:https://www.cnblogs.com/sunniest/p/4437806.html
總結
以上是生活随笔為你收集整理的Memcached原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: itoa实现
- 下一篇: android 应用间共享数据,调用其他