一 Redis数据结构-Redis的数据存储及String类型的实现( 四 )

  • len:表示已使用长度
  • alloc:表示分配空间大小,剩余空间大小可以使用alloc - len获得
  • 3.5 字符集编码redisObject包装存储的value值,通过字符集编码对数据存储进行优化,string类型的编码方式有如下三种:
    • embstr:CPU每次按Cache Line 64byte读取数据,一个redisObject对象为16byte,为填充64byte大小,会向后再读取48 byte数据 。但获取实际数据时还需要再通过*ptr指针读取对应内存地址的数据 。而一个sdshdr8属性的信息占用4byte,其余44byte可以用来存储数据 。如果value值小于44,byte可以通过一次读取缓存行获取数据 。
      一 Redis数据结构-Redis的数据存储及String类型的实现

      文章插图
    • int:如果SDS小于20位,并且能够转换成整型数字,redisObject的*ptr指针会直接进行存储 。
      一 Redis数据结构-Redis的数据存储及String类型的实现

      文章插图
    • raw:SDS
      一 Redis数据结构-Redis的数据存储及String类型的实现

      文章插图
    4 总结redis作为k-v数据存储,因查找和操作的时间复杂度都是O(1)和丰富的数据类型及数据结构的优化,了解了这些数据类型和结构更有利于我们平时对于redis的使用 。下一期将对其它常用数据类型List、Hash、Set、Sorted Set所使用的ZipList、QuickList、SkipList做进一步介绍,对于文章中不清晰不准确的地方欢迎大家一起讨论交流 。
    作者:盛旭

    经验总结扩展阅读