天天看点

LevelDB之Cache之HandleTable

HandleTalbe::HandleTable()

LevelDB之Cache之HandleTable

LRUHandle* HandleTalbe::Insert(LRUHandle* h)

1. 插入元素

情况1:对于原始的HandleTable中没有元素

LevelDB之Cache之HandleTable
LevelDB之Cache之HandleTable

情况2:对于待插入的HandleTable中通过FindPointer找到具有相同的key或hash的节点

LevelDB之Cache之HandleTable
LevelDB之Cache之HandleTable

2. 扩容,重新计算hash并调整节点

LevelDB之Cache之HandleTable

插入4个元素后的HandleTable内存结构示意图:

LevelDB之Cache之HandleTable

扩容:

LevelDB之Cache之HandleTable

重新计算hash及调整结点:

即将原来list_中的所有节点,根据当前桶的个数(new_length)及其hash值重新计算放置到new_list中的桶索引,下图中标红的语句。

LevelDB之Cache之HandleTable

调整后的HandleTable内存结构示意图:

LevelDB之Cache之HandleTable