栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Redis底层存储结构二---Redis中Key-Value中的整体存储流程
  • 1、RedisDb
  • 2、dict
  • 3、dictht
  • 4、dictEntry
  • 5、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的缓存行有关,在),则存放指向数据的地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号