1)什么是內存碎片?
內存是大小有限的資源。例如把內存比作一張小床,來了一個小伙伴,可以睡下,再來一個小伙伴也能睡下。現在兩個人了,他們占了差不多的大小的位置(資源),位置還有剩下。然后再來一個小胖子,他的身形幾乎是之前兩個人的一倍,他要占掉一個很大的位置(資源),但沒關系,小胖子還是可以睡得下!但小胖子睡下后,只剩下很小的一個空間(位置)了,再來一個最瘦的瘦子都睡不了。那空出來的一點位置就這樣浪費了。這就是內存碎片!!
內存是有限的,被多個程序應用占用,但內存不可能剛剛好使用完,總是有一小部分不能被使用,這就是內存碎片。
2)memcached為了防止內存碎片,做了什么處理?
memcached為了減少內存碎片,它把內存事先分割成固定大小的幾個區(slab),第個區里再分割相同大小的塊(chunk)。在使用memcached的添加緩存值時,它自動選擇合適的chunk來儲存信息,大的value用大的chunk,小的value用小的chunk。
PS:slab的大小由 memcached能使用的內存和增長比例(growth factor,默認1.25)來決定。啟動memcached時,分別可以使用-m和-f參數來設定
PS2:memcached這樣做只是能減少內存碎片,但還是會有內存碎片,內存碎片是不可以避免的
3)memcached的key value長度限制
key 長度不能超過255字符長度
value 長度不能超過1024 * 1024字符長度(即 1M)