面试官问我 Redis 数据类型,我回答了 8 种.( 三 )


面试官问我 Redis 数据类型,我回答了 8 种.

文章插图
 

面试官问我 Redis 数据类型,我回答了 8 种.

文章插图
 
看到这,一切就都解释通了,非常简单,就只是申请内存这一步的区别而已 。但对于我们这些什么简单的事情都要包装成高端大气话术的程序员来说,还是要想办法装一下,我们总结出使用 embstr 编码相比于 raw 编码的好处:
  • embstr 只申请了一次内存,而 raw 需要申请两次,因此节约了一次申请内存的消耗
  • 释放 embstr 只需要释放一次内存,而 raw 需要两次,因此节约了一次释放内存的消耗
  • embstr 的 redisObject 和 sdshdr 放在一块连续的内存里,因此更能利用 缓存 带来的优势
怎么样,源码级的理解,加上迷倒面试官的总结话术,够意思吧 。
不同编码类型的条件上个部分我们通过字符串,观察了不同的编码类型,也理解了为什么要有不同的编码类型的实现 。接下来我们总结下其他的对象与编码类型,原理就不深入源码分析了,和字符串的基本思想是一样的 。
字符串的编码类型
  • int:8 个字节的长整型
  • embstr:小于等于 39 字节的字符串
  • raw:大于 39 字节的字符串
哈希的编码类型
  • ziplist:元素个数小于 512,且所有值都小于 64 字节
  • hashtable:除上述条件外
列表的编码类型
  • ziplist:元素个数小于 512,且所有值都小于 64 字节
  • hashtable:除上述条件外
集合的编码类型
  • intset:元素个数小于 512,且所有值都是整数
  • hashtable:除上述条件外
有序集合的编码类型
  • ziplist:元素个数小于 128,且所有值都小于 64 字节
  • hashtable:除上述条件外
【面试官问我 Redis 数据类型,我回答了 8 种.】由于不展开讲解,纯记忆的东西我觉得用最干净的办法描述给大家即可,无多余部分 。


推荐阅读