• Redis核心原理-简单动态字符串SDS


    SDS简介

    Redis是C语言编写的,但没有使用c语言的字符串结构,而是自己实现了一套简单动态字符串 simple dynamic string 简称SDS,SDS兼容C语言的字符串类型,原理类似Java的ArrayList,扩容和缩短长度时可以减少内存频繁分配。

    SDS用途

    • 包含字符串的键、值底层是用SDS实现
    • 持久化AOF的缓冲区实现

    SDS属性原理

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

    len

    表示SDS所保存字符串的长度,获取字符串长度高效,时间复杂度为O(1)

    buf[]

    保存字符串的二进制数据,长度 = 字符数量 + 1(空字符)+ free

    free

    记录buf数组中未使用字节的数量,可以减少修改字符串带来的内存重分配次数;优化策略有空间预分配和惰性空间释放

    空间预分配

    扩大SDS空间时(比如两个字符串拼接)使用空间预分配不用随时分配内存,预分配规则为 len 小于 1M 时,free = len; len 大于1M 时 free = 1M

    惰性空间释放

    缩短SDS空间时(比如剪切字符串)不立即回收内存,使用free来记录缩短长度,等待将来使用,避免内存浪费

  • 相关阅读:
    js中变量声明提前
    冒泡与捕获
    win7安装不了nodejs及解决方法
    nodejs配置app的服务
    Ming Rpc
    test
    Java8 Lambda sample (iwantmoon.com出品)
    Spring Mvc 输出Json(iwantmoon.com出品)
    单点登录(iwantmoon.com出品)
    虚拟机WIN10发布.NetCore 3.1
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/14269031.html
Copyright © 2020-2023  润新知