Redis 字符串用起来简单,但是原理可是真不简单(上)

Hello,大家好,我是阿粉~

无论你现在使用什么编程语言,每天最高频使用的应该就是字符串。可以说字符串对象很基础,也很重要。

那么今天想跟大家聊聊 Redis 字符串相关实现,来看下这个看起来简单的字符串,为什么实现起来确实不简单?

看完这篇文章你可以学到:

  • Redis 字符串对象多种数据结构
  • 底层数据结构转换关系
  • SDS 动态字符串
  • Redis 采用 C 语言实现,那么字符串为什么不直接使用 C 语言的字符串?

Redis 对象

每当我们在 Redis 中保存一对新的键值对时,Redis 至少会创建两个对象,一个对象用作保存键,而另一个对象用作保存值。

Redis 中每个对象都是一个 redisObject 结构,这个结构中有三个属性:

  • type,表示对象的类型
  • encoding,表示编码
  • pstr,指向底层数据结构的指针Redis 字符串用起来简单,但是原理可是真不简单(上)

type 代表对象类型,目前可以使用类型为:

  • 字符串对象
  • 列表对象
  • 哈希对象
  • 集合对象
  • 有序集合对象

Redis 字符串用起来简单,但是原理可是真不简单(上)

我们可以使用 Redis 的 TYPE 指令,查看当前键对应值对象类型。

Redis 字符串用起来简单,但是原理可是真不简单(上)

Redis 键对象说起来很简单,它总是是一个字符串对象,而值对象就相对复杂了,它可以是字符串,也可以是集合,也可以是字典等对象。

每个对象类型底层实现的时候将会采用了多种数据结构,而 encoding 代表底层数据结构类型:

Redis 字符串用起来简单,但是原理可是真不简单(上)

我们可以使用 Redis 的 OBJECT ENCODING 指令查看一个当前键值对象底层的编码:

Redis 字符串用起来简单,但是原理可是真不简单(上)

每个对象类型,可能支持多种数据结构,关系如下:

Redis 字符串用起来简单,但是原理可是真不简单(上)


上一篇:Redis命令——字符串(String)


下一篇:redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系