Redis数据结构和对象(一)

来源:互联网 发布:剑三脸型数据怎么修改 编辑:程序博客网 时间:2024/06/06 08:25

Redis数据结构和对象(一)
Redis数据结构和对象(二)
Redis数据结构和对象(三)
Redis数据结构和对象(五)
Redis数据结构和对象(六)
Redis数据结构和对象(七)——对象

一,简单动态字符串(SDS)


  • 1,用途:保存数据库中的字符串值,及用作缓冲区(AOF)。
  • 2,数据结构。
    Redis-SDS数据结构
  • 3,SDS与C字符串的区别。
    • 1)常数复杂度获取字符串长度。SDS会记录自身的长度信息。
    • 2)杜绝缓冲区溢出。C字符串不记录自身长度很容易造成缓冲区溢出。
    • 3)减少修改字符串时带来的内存重分配次数。
      • a) c字符串内存重分配。
        • 拼接:拼接前需要内存重分配,扩展底层数组的大小,——如果忘了可能会导致缓存区溢出。
        • 截断:截断后,程序需要内存重分配来释放字符串,不再使用那部分空间——如果忘了会导致内存泄漏。
      • b) SDS通过记录free属性。实现空间预分配和惰性空间释放两种优化方式。
        • 空间预分配:程序会为SDS分配修改所需的空间,还会为SDS分配额外的未使用空间。公式:小于1MB,len属性值会和free属性值相同;大于1MB,每次增加1MB
        • 惰性空间释放:缩短SDS保存的字符串时,不立即使用内存重分配来回收缩短后的多出来的字符串,而是保留在free属相中,待将来使用。SDS也提供了相应的API,可以在需要的时候释放SDS未使用的空间。
    • 4)二进制安全。
      • a) c字符串只能保存二进制文件,二不能保存图片,视频,压缩文件。因为字符串内不能包含其他的空字符。
      • b) SDS的buf属性被称为字节数组——SDS会通过len属性来判断字符串是否已经结束。
    • 5)兼容部分C字符串函数。
0 0
原创粉丝点击