首页 > 数据库 >redis数据结构sds

redis数据结构sds

时间:2023-08-14 15:12:16浏览次数:36  
标签:字节 SDS sds redis 空间 使用 字符串 数据结构 分配

简单字符串sds

数据结构

struct sdshdr {
//
记录buf
数组中已使用字节的数量
//
等于SDS
所保存字符串的长度
int len;
//
记录buf
数组中未使用字节的数量
int free;
//
字节数组,用于保存字符串
char buf[];
};

img

特性

空间预分配

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

如果对SDS进行修改之后,SDS的长度将小于1MB,那么程序分配和len属性相同大小的未使用空间,这时SDS len属性的值将和free属性的值相同。

如果对SDS进行修改之后,SDS的长度将大于等于1MB,那么程序会分配1MB的未使用空间

惰性空间释放

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

优点

  1. 常数复杂度获取字符串的长度
  2. 杜绝缓冲区溢出
  3. 减少字符串长度时所需的内存冲分配次数。
  4. 二进制安全
  5. 兼容部分C字符串函数

标签:字节,SDS,sds,redis,空间,使用,字符串,数据结构,分配
From: https://www.cnblogs.com/zpf253/p/17628694.html

相关文章

  • 使用 Amazon MemoryDB for Redis 作为 JuiceFS 的元数据引擎
    概览JuiceFS 是一款面向云原生设计的高性能共享文件系统,在Apache2.0开源协议下发布。JuiceFS提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。JuiceFS也提供如HDFS兼容的API、S3兼容的API......
  • 考研数据结构——每日一题[哈希表]
    840.模拟散列表维护一个集合,支持如下几种操作:Ix,插入一个数x;Qx,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为Ix,Qx中的一种。输出格式对于每......
  • Redis 持久化及集群架构
    1Redis持久化1.1持久化的概念和原因Redis持久化是指将Redis服务器中的数据保存到磁盘上,以便在服务器重启后可以重新加载数据。持久化是为了解决Redis内存数据库的数据丢失问题。持久化的原因有以下几点:数据安全:通过将数据保存到磁盘上,即使发生服务器故障或断电等情况......
  • Redis设计与实现——对象(二刷)
    对象介绍Redis底层的基本数据类型包括动态字符串、链表、字典、跳表、整数集合、压缩列表。但是Redis并没有直接使用这些基本数据类型来构建键值对数据库,而是基于这些数据类型创建了一个对象系统,对象系统包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象。struct......
  • Redis设计与实现——数据结构(二刷)
    SDS动态字符串Redis是c语言实现的,传统c字符串存在不可变导致的频繁内存分配,一些API函数可能引起缓冲区溢出等问题。Redis在c字符串的基础上,封装实现了SDS动态字符串,能够根据每次存储关键字的大小自动申请额外缓冲区内存,避免频繁申请和缓冲区溢出问题。SDS定义str......
  • 数据结构与算法 --- 如何分析排序算法
    引言排序算法是最基础的算法,对于排序算法,除学习算法原理,代码实现之外,更重要的是学习每个算法的特点,知道在什么场景下选择那种算法。那一定是选择时间复杂度最低的排序算法就是最优的吗?可以从以下几个方面分析一下。排序算法的执行效率对于排序算法的执行效率,一般从以下几个方......
  • Redis
    RedisRedis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的API。Redis通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集......
  • 数据结构与算法 --- 组数、链表、栈和队列(一)
    数组、链表、栈和队列是四种基础数据结构,他们是高级、复杂的数据结构和算法的基础。本篇先来讲述数组,链表,及算法的优化策略。数组定义数组:数组是一种线性表数据结构,它用一组连续的内存空间存储一组具有相同类型的数据。定义中有三个关键词:线性表连续的内存空间相同类型数......
  • 数据结构与算法 --- “哨兵”思想
    引言哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。介绍在算法中,"哨兵"思想是指在循环中设置一个特殊的元素(称为哨兵),以便在循环过程中能够更高效地处理某些边界情况或结束条件。......
  • 数据结构与算法 --- 组数、链表、栈和队列(二)
    继数据结构与算法---组数、链表、栈和队列(一)讲解完数组,链表及算法的优化策略之后,接下来继续讲解两种特殊的线性表结构,栈和队列。栈对“栈”有一个很形象的比喻,栈就像一摞叠在一起的盘子,放盘子时,只能放在上面,不能将盘子插入到中间的任意位置;取盘子时,只能从最上面取,不能从中间任......