除了它是内存数据库,使得所有的操作都在内存上进⾏之外,还有⼀个重要因素,它实现的
数据结构,使得我们对数据进⾏增删查改操作时,Redis 能⾼效的处理。
因此,这次我们就来好好聊⼀下 Redis 数据结构,这个在⾯试中太常问了。
注意,Redis 数据结构并不是指 String(字符串)对象、List(列表)对象、Hash(哈希)
对象、Set(集合)对象和 Zset(有序集合)对象,因为这些是 Redis 键值对中值的数据类
型,也就是数据的保存形式,这些对象的底层实现的⽅式就⽤到了数据结构。
我画了⼀张 Redis 数据类型(也叫 Redis 对象)和底层数据结构的对应关图,左边是 Redis
3.0版本的,也就是《Redis 设计与实现》这本书讲解的版本,现在看还是有点过时了,右边
是现在 Github 最新的 Redis 代码的(还未发布正式版本)。
可以看到,Redis 数据类型的底层数据结构随着版本的更新也有所不同,⽐如:
在 Redis 3.0 版本中 List 对象的底层数据结构由「双向链表」或「压缩表列表」实现,但
是在 3.2 版本之后,List 数据类型底层数据结构是由 quicklist 实现的;
在最新的 Redis 代码(还未发布正式版本)中,压缩列表数据结构已经废弃了,交由
listpack 数据结构来实现了。
评论