下载此文档

rediszipmap内存布局分析.doc


文档分类:研究报告 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
rediszipmap内存布局分析
  Redis 被称为 key/value 应用中的瑞士军刀,除了其丰富的数据结构支持,更重要的是高效的内存使用,分析源码可以发现作者使用每一个 byte 都精打细算。在 hashtable 实现中,Redis 引入了 zipmap 数据结构,保证在 hashtable 刚创建以及元素较少时,用更少的内存来存储,同时对查询的效率也不会受太大的影响。下面就以源码和例子结合的方式来分析一下 zipmap 的内存布局。
  先来看一下 zipmap 提供的和存储相关的3个 API:
  zipmapNew:创建一个 zipmap 字符串。zipmap 创建时只有2个字节,后面会随着 set 和 delete 操作动态扩展和收缩。
  zipmapSet: 加入新的 key/value 或者修改 zipmap 中已有 key 对应的 value。
  zipmapDel:从 zipmap 中删除 key/value。
  下面给出一段伪代码并分析其内存布局的变化,如下图:
   zipmapNew ();
   zipmapSet (key1,value1);
   zipmapSet (key2,value2);
   zipmapSet (key1,value3);
   zipmapDel (key2);
   zipmapSet (key1,value4);
  1. zipmapNew ();
  创建一个 zipmap 结构体,包含两个字节,第一个字节(zmlen)是长度为1个字节的无符号整数,用来保存 zipmap 当前元素个数(而非字符串长度)。当 zipmap 的元素个数大于等于254时,zmlen 将不再起作用,zipmap 需要遍历整个字符串来获取当前元素个数。最后一个字节为255,表示 zipmap 的结束。
  2. zipmapSet (key1, value1)
  一个元素(key/value)在 zipmap 中有5部分组成: <len><key><len><free><value>。
  <len>表示紧跟其后的 string(key 或者 value)的长度。如果 string 的长度小于254(这里代码和注释不统一,注释是253,但代码是254,以代码为准),<len>用一个字节就可以表示(254和255有特殊含义),如果 string 的长度大于等于254,<len>需要5个字节来表示,第一个字节设置为254,紧跟其后的4个字节通过编码(按主机字节序)来表示<len>的值。zipmapEncodeLength 和 zipmapDecodeLength 就是用来对<len>进行编解码的。<key>和<value>是 char 型 string,<free>在第6步进行说明。
  3. zipmapSet (key2, value2)
  调用 zipmapSet 加

rediszipmap内存布局分析 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人好用的文档
  • 文件大小24 KB
  • 时间2021-07-26