1. 定义
zipmap是为了优化string==>string的映射而实现的特殊编码结构,它由7部分组成,zmlen,klen,key,vlen,free,val,end,但实际上讲只有4部分,zmlen,len(klen,vlen,end),data(key,val),free。
属性 | 描述 |
---|---|
zmlen | 1字节大小,存储了压缩字典中kv对的个数,当超过254时,需要遍历才能获取结点数 |
klen | key的长度,0~253时使用1字节,254表示由后4字节表示长度 |
key | 字典的key值 |
vlen | val的长度,0~253时使用1字节,254表示由后4字节表示长度 |
free | 1字节大小,value数据缩小后,产生的内存空间剩余 |
val | 结点的val值 |
end | 结束标志,实际上是len属性,当len=255时表示压缩字典结束 |
zipmap并没有像ziplist连锁更新之类的特殊操作,只是对内存进行一些移动,扩展,收缩等待。
2. 源码剖析
- 查找结点
1 | /** |
- 添加结点
1 | /** |
- 删除结点
1 | unsigned char *zipmapDel(unsigned char *zm, unsigned char *key, unsigned int klen, int *deleted) { |