memcache 內部結構詳解

[url]http://tank.blogs.tkiicpp.com/category/programming/memcache/[/url]
Memcached主要的cache機制是LRU(最近最少用)算法+超時失效
http://code.google.com/p/memcached/

Memcached 集羣架構方面的問題
http://kb.cnblogs.com/page/69074/#how%20does%20memcached%20work

Memcache內存分配策略

1、Page爲內存分配的最小單位。
Memcached的內存分配以page爲單位,默認情況下一個page是1M,可以通過-I參數在啓動時指定。
2、Slabs劃分數據空間。
Memcached並不是將所有大小的數據都放在一起的,而是預先將數據空間劃分爲一系列slabs,每個slab只負責一定範圍內的數據存儲。
memcached默認情況下下一個slab的最大值爲前一個的1.25倍,這個可以通過修改-f參數來修改增長比例
3、Chunk纔是存放緩存數據的單位。
Chunk是一系列固定的內存空間,這個大小就是管理它的slab的最大存放大小
4、Slab的內存分配。
Memcached在啓動時通過-m指定最大使用內存,但是這個不會一啓動就佔用,是隨着需要逐步分配給各slab的。
如果一個新的緩存數據要被存放,memcached首先選擇一個合適的slab,然後查看該slab是否還有空閒的chunk,如果有則直接存放進去;如果沒有則要進行申請。
slab申請內存時以page爲單位,所以在放入第一個數據,無論大小爲多少,都會有1M大小的page被分配給該slab。
申請到page後,slab會將這個page的內存按chunk的大小進行切分,這樣就變成了一個chunk的數組,在從這個chunk數組中選擇一個用於存儲數據

5、Memcached內存分配策略。
綜合上面的介紹,memcached的內存分配策略就是:按slab需求分配page,各slab按需使用chunk存儲。
這裏有幾個特點要注意,

Memcached分配出去的page不會被回收或者重新分配
Memcached申請的內存不會被釋放
slab空閒的chunk不會借給任何其他slab使用


提供了gets和cas命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章