1. redis底层数据结构
redis 6数据结构和底层数据结构的关系
String类型本质是SDS动态字符串,即redis层面的数据结构底层会有对应的数据结构实现,上面是redis 6之前的实现
redis 7数据结构和底层数据结构的关系
Redis 7和6之间的关系就是压缩列表不见了,然后引入了listpack这个数据结构(紧凑列表)。
redis 7新特性:
2. 插入KV底层源码流程分析
例如我们插入下面一对kv
set hello word
可以看到hello的类型是String
我们看一下key的底层编码
object encoding hello
为什么key是String类型,底层却在操作一个什么embstr类型?
set hello word,因为redis是kv键值对的数据库,每个键值对都会有一个dictEntry,里面指向了key和value的指针,next指向下一个dictEntry,key是字符串,但是redis没有直接使用C的字符数组来表示字符串,而是存储在redis自定义SDS中。value既不是直接作为字符串存储,也不是存储在SDS中,而是存储在redisObject中,实际上常用五种数据类型的任意一种,都是通过redisObject来存储的。
struct redisObject {
//对象的类型
unsigned type:4;
//具体的数据结构
unsigned encoding:4;
//最近最少使用,用于内存淘汰