memcached内存管理及key value长度限制

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)

原文地址:https://www.cnblogs.com/tujia/p/5413020.html