加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

深入了解一下Redis的内存模型!

发布时间:2019-03-17 06:46:40 所属栏目:编程 来源:编程迷思
导读:一、媒介 Redis是今朝最火爆的内存数据库之一,通过在内存中读写数据,大大进步了读写速率,可以说Redis是实现网站高并发不行或缺的一部门。 我们行使Redis时,会打仗Redis的5种工具范例(字符串、哈希、列表、荟萃、有序荟萃),富厚的范例是Redis相对付M

字符串范例的内部编码有3种,它们的应用场景如下:

  •  int:8个字节的长整型。字符串值是整型时,这个值行使long整型暗示。 
  •  embstr:<=39字节的字符串。embstr与raw都行使redisObject和sds生涯数据,区别在于,embstr的行使只分派一次内存空间(因此redisObject和sds是持续的),而raw必要分派两次内存空间(别离为redisObject和sds分派空间)。因此与raw对比,embstr的甜头在于建设时少分派一次空间,删除时少开释一次空间,以及工具的全部数据连在一路,探求利便。而embstr的弊端也很明明,假如字符串的长度增进必要从头分派内存时,整个redisObject和sds都必要从头分派空间,因此redis中的embstr实现为只读。 
  •  raw:大于39个字节的字符串 

示譬喻下图所示:

embstr和raw举办区分的长度,是39;是由于redisObject的长度是16字节,sds的长度是9+字符串长度;因此当字符串长度是39时,embstr的长度正好是16+9+39=64,jemalloc正好可以分派64字节的内存单位。

(3)编码转换

当int数据不再是整数,或巨细高出了long的范畴时,自动转化为raw。

而对付embstr,因为着实现是只读的,因此在对embstr工具举办修改时,城市先转化为raw再举办修改,因此,只要是修改embstr工具,修改后的工具必然是raw的,无论是否到达了39个字节。示譬喻下图所示:

2、列表

(1)轮廓

列表(list)用来存储多个有序的字符串,每个字符串称为元素;一个列表可以存储2^32-1个元素。Redis中的列表支持两头插入和弹出,并可以得到指定位置(或范畴)的元素,可以充当数组、行列、栈等。

(2)内部编码

列表的内部编码可所以压缩列表(ziplist)或双端链表(linkedlist)。

双端链表:由一个list布局和多个listNode布局构成;典范布局如下图所示:

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读