memlink按照天涯的人说是一个灰常牛的key-List系统,比Redis要快很多倍,下面就来一点点看它的代码。在内存中的Block也是通过一个池来管理的,用到的数据结构大致有三个DataBlock、MemItem、MemPool。MemPool的结构如下:
typedef struct _mempool
{
MemItem *freemem; // 数组
int size; // 数组的大小
int used; // 正在用的MemItem的大小
int blocks; // 内存池中的数目
}MemPool;
在一个内存池中管理的有各种大小的Block,而相同大小的Block就被放在统一个MemItem中来管理,该结构如下:
typedef struct _mem_item
{
int memsize; // 管理的块的大小
unsigned int block_count; // 块的数目
unsigned int total; // 用的空闲的块的总数
DataBlock *data; // 相当于一个链表头
}MemItem;
通过这个单位就把所有的大小相同的放在了统一个Item中管理,而数据块的表示如下: