memchche和redis内存分配理解,不知道对不对大神解答。
在网上搜了好多他俩的内存分配,看的都模模糊糊的,现在我把自己的理解写下了,望大神指导一下看是不是正确。有好几个问题希望有人或者大家能一一解答。
首先memcache是首先我们可以指定一个内存大小作为它的使用内存,比如1G,但是memcache不会以下子使用我们分配的所有内存(就是1G),而是按需分配。首先分配很多个slab就是分配很多个大小相等的页,然后每个页再分配很多个块,块大小是按倍数递增的,第一个块和倍数都可以指定,然后进来的数据,按着比自己大的最接近的块分配进去。
这我有个模糊点,就是分配很多页,应该不是把1G都分配成页也就是slab吧,是先分配一部分,然后slab快不够用了,再去分配新的slab吗?
还有个就是,memcache内存回收,如果key过期了,是它占用的内存不会被清除吗?但是这个时候如果有新的存入操作,可以去分配到这个内存中来,进入之前会把块也就是chunk清理一下是吗?还有就是如果memcache内存都被占用了,如果是lru方法,清除近段时间使用最少的chunk,意思是不是就是即使key生命周期还没完结,也会被清理啊?
redis的内存分配,一般网上的解释是上来就说在分配一块内之后,将内存大小放入内存块头部,这我有个盲点就是,什么时候分配内存啊?redis好像不能和memcache指定内存大小吧?那这个一块内存是啥意思?难道是每次存储新东西都分配一次吗?这我不太明白。就是不明白咱们的数据是怎么存放的。还有redis的最大使用内存又是如何规定的呢?比如像上面memcache定的可以用1G内存。