美文网首页我爱编程
Redis:通过未使用空间,SDS实现空间预分配和惰性空间释放两

Redis:通过未使用空间,SDS实现空间预分配和惰性空间释放两

作者: yeying12321 | 来源:发表于2018-04-16 15:12 被阅读160次

SDS:简单动态字符串

空间预分配

空间预分配用于优化 SDS 的字符串增长操作: 当 SDS 的 API 对一个 SDS 进行修改, 并且需要对 SDS 进行空间扩展的时候, 程序不仅会为 SDS 分配修改所必须要的空间, 还会为 SDS 分配额外的未使用空间。

其中, 额外分配的未使用空间数量由以下公式决定:

如果对 SDS 进行修改之后, SDS 的长度(也即是 len 属性的值)将小于 1 MB , 那么程序分配和 len 属性同样大小的未使用空间, 这时 SDS len 属性的值将和 free 属性的值相同。 举个例子, 如果进行修改之后, SDS 的 len 将变成 13 字节, 那么程序也会分配13 字节的未使用空间, SDS 的 buf 数组的实际长度将变成 13 + 13 + 1 = 27 字节(额外的一字节用于保存空字符)。
如果对 SDS 进行修改之后, SDS 的长度将大于等于 1 MB , 那么程序会分配 1 MB 的未使用空间。 举个例子, 如果进行修改之后, SDS 的 len 将变成 30 MB , 那么程序会分配 1 MB 的未使用空间, SDS 的 buf 数组的实际长度将为 30 MB + 1 MB + 1 byte 。
通过空间预分配策略, Redis 可以减少连续执行字符串增长操作所需的内存重分配次数。

惰性空间释放
惰性空间释放用于优化 SDS 的字符串缩短操作: 当 SDS 的 API 需要缩短 SDS 保存的字符串时, 程序并不立即使用内存重分配来回收缩短后多出来的字节, 而是使用 free 属性将这些字节的数量记录起来, 并等待将来使用。

相关文章

  • Redis:通过未使用空间,SDS实现空间预分配和惰性空间释放两

    SDS:简单动态字符串 空间预分配 空间预分配用于优化 SDS 的字符串增长操作: 当 SDS 的 API 对一个...

  • Redis sds

    一、SDS结构 老版本 sds优点 空间预分配 惰性空间释放 现在使用版本 5种不同类型的数据结构分别对应不同长度...

  • redis存储结构sds(sds simple dynamic

    //等于SDS保存字符串的长度 int len; //记录buf数组中未使用的字节的数量 //实现空间预分配和惰性...

  • 空间预分配

    空间预分配 对于追加操作来说,Redis不仅会开辟空间至够用而且还会预分配未使用的空间(free)来用于下一次操作...

  • redis设计与实战笔记

    数据结构 动态字符串定义:优点: 杜绝内存溢出 减少内存分配次数空间预分配和惰性空间释放。 链表定义: 字典定义:...

  • 《Redis设计与实现》读书笔记

    第二章 简单动态字符串 (SDS) 1、SDS的定义 比如,free为0,则表示SDS没有分配任何未使用的空间,l...

  • 《Redis设计与实现》读书笔记

    第二章 简单动态字符串 (SDS) 1、SDS的定义 比如,free为0,则表示SDS没有分配任何未使用的空间,l...

  • Redis 的动态字符串实现(2)

    Redis 的动态字符串实现sds.h和 sds.c 1.优化点,根据len 大小决定需要的使用数据结构,节省空间...

  • Java-Redis-进阶

    一、Java-Redis-进阶 1.1 SDS(动态字符串) 空间预分配:当我们对SDS进行扩展操作的时候,Red...

  • Java--垃圾回收原理

    ·内存管理  Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放。  对象空间的分配:使用...

网友评论

    本文标题:Redis:通过未使用空间,SDS实现空间预分配和惰性空间释放两

    本文链接:https://www.haomeiwen.com/subject/oqrekftx.html