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 扩容
如果不重复造轮子的话,永远不知道轮子的原理,所以我愿意重复制造一个又一个轮子