• Redis 学习笔记(一) 字符串 SDS


    SDS 简单动态字符串。

    SDS的结构:

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

    1、与c语言的字符串相比,SDS获取长度时,时间复杂度位O(1),c的复杂度位O(n)。

    2、杜绝缓冲区溢出,c字符串若未重新分配内存,在进行字符串拼接时,会导致扩展字符串s1的数据溢出到s2所在的空间,导致s2所保存的内容被意外修改(缓冲区溢出)。

    3、杜绝内存泄漏,若裁剪字符串,若未重新分配内存,则会造成内存泄露。

    4、对于SDS来说,如果扩展,则SDS API 会检查空间是否足够,如果足够则直接使用未使用的空间,无需重新分配。惰性释放空间,SDS需要缩短时,程序不会立即重新分配内存,而是使用free记录这些多余的空间,等待将来使用。

    5、SDS的API都是使用二进制安全的,所有的SDS API都会以处理二进制的方式处理SDS存放在buf数组中的数据,程序不会对其中的数据做任何限制、过滤、或者假设,所以Redis不是用数组保存字符串,而是用它来保存一系列的二进制数据。

  • 相关阅读:
    CAS无锁模式
    Redis 字符串结构和常用命令
    Redis 链表结构 和 常用命令
    Redis hash结构 和常用命令
    Spring + Redis ( 简单使用)
    使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项
    Java 208道面试题及部分答案
    面试相关知识点
    使用IDEA 搭建一个SpringBoot + Hibernate + Gradle
    Java相关知识点
  • 原文地址:https://www.cnblogs.com/xtt321/p/12865185.html
Copyright © 2020-2023  润新知