首页 > 代码库 > memcache assoc

memcache assoc

 

关键数据结构

/* 主哈希表 */static item** primary_hashtable = 0;/* 哈希表扩容的前期表,存储还没来得及移动到主哈希表的key */static item** old_hashtable = 0;/* 哈希表中的item数 */static int hash_items = 0;/* Flag: Are we in the middle of expanding now? */static int expanding = 0;/* * 扩容迁移以bucket为单位,this is how * far we‘ve gotten so far. Ranges from 0 .. hashsize(hashpower - 1) - 1. */static int expand_bucket = 0;

1 assoc_expand

扩容

哈希扩容:哈希表扩容的到2hashpower+1

状态标识:expanding 置为1,标识正在扩容

哈希搬家:old_hashtable = primary_hashtable;

2 assoc_find

查找

关注expanding判断在old_hashtable还是primary_hashtable

3 assoc_delete

删除

_hashitem_before 获取删除之前的位置

4 assoc_insert

插入

find一把,保证不冲突

算出哈希key

Expanding 则插入odl_hashtable,否则primary里边

! expanding && hash_items > (hashsize(hashpower) * 3) / 2 扩容

memcache assoc