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 扩容

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。