Redis数据结构和对象(一)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值