Redis底层存储结构二---Redis中Key-Value中的整体存储流程

Redis底层存储结构二---Redis中Key-Value中的整体存储流程

在上一篇博客中我们谈及到Redis底层字符串类型为sds,那么这篇博客我们聊一下,Redis整个的Key-Value在C语言中的存储形式是一个什么样子的。
首先我们先看一张总图:

在这里插入图片描述

接下来我们来细细对这一样图分析一下:

1、RedisDb

RedisDb是Redis的底层数据结构的开始,里面存放着Redis的数据,一般默认有16个,这个是可以配置的,Redis的数据是以字典的形式在底层展示的,dict详情请看2。

2、dict

里面最重要的有两个变量
1、type:标识整个hashTable的数据类型是什么。
2、dictht ht[2]:表示有两个hashTable,目的是用来扩容,ht[0]是当前数据的存放变量,ht[1]是将来需要扩容时的新hashTable,hdictht的详情请看3。

3、dictht

dictht里面的四个参数
1、dictEntry:这个就是具体表示Key-Value形式的数据结构,dictEntry的详情请看4。
2、size:表示当前HashTable的大小。
3、sizemark:永远都是size-1,为了到时候计算hashcode时可以将 % 转换成 & 。
4、used:表示hashtable当前已经使用的容量。

4、dictEntry

dictEntry里面最重要的三个参数
1、key:这个就是具体表示Key-Value形式的数据结构的key,底层就是SDS。
2、value:这个就是具体表示Key-Value形式的数据结构的value数据结构,详情请看5。
3、next:指向下一个节点的指针。

5、value

value里面最重要的五个参数
1、type:代表当前数据的类型是什么,比如string、list、hash、set、zset等。
2、encoding:表示当前数据在内存中的数据结构是什么,比如raw、embstr、int、ziplist等。
3、lru:表示过期算法是哪一种。
4、refcount:C语言得程序员自己管理内存,不像Java有垃圾收集器,这个就是引用计数器,来管理自己的内存,防止内存溢出。
3、*ptr:指向真正得数据,如果是整型值等,则直接存储,如果是很长的字符串(这个到底有多长,和CPU的缓存行有关,在),则存放指向数据的地址。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值