客户网站 备案,北京网梯科技发展有限公司,第三次网站建设的通报,河北省住房建设厅官方网站目录
Redis 键值对数据库的全过程编辑
RedisObject结构体
Redis的encoding编码方式
type对应的数据对象类型 Redis 键值对数据库的全过程 redisDb 结构#xff0c;表示 Redis 数据库的结构#xff0c;结构体里存放了指向了 dict 结构的指针#xff1b;dict 结构#…目录
Redis 键值对数据库的全过程编辑
RedisObject结构体
Redis的encoding编码方式
type对应的数据对象类型 Redis 键值对数据库的全过程 redisDb 结构表示 Redis 数据库的结构结构体里存放了指向了 dict 结构的指针dict 结构结构体里存放了 2 个哈希表正常情况下都是用「哈希表1」「哈希表2」只有在 rehash 的时候才用使用哈希表保存Redis中所有键值对哈希表的最大好处就是让我们可以用 O(1) 的时间复杂度来快速查找到键值对。ditctht 结构表示哈希表的结构结构里存放了哈希表数组数组中的每个元素都是指向一个哈希表节点结构dictEntry的指针dictEntry 结构表示哈希表节点的结构结构里存放void * key 和 void * value 指针分别指向了实际的键对象和值对象 都是用RedisObject描述的对象 。 key 指向的是 String 对象而 value 则可以指向 String 对象、List 对象、Hash 对象、Set 对象和 Zset 对象。 RedisObject结构体
Redis中的任意数据类型的键和值都会被封装在RedisObject结构体中也叫做Redis对象
从Redis的使用者的角度来看⼀个Redis节点包含多个database非cluster模式下默认是16个cluster模式下只能是1个而一个database维护了从key space到object space的映射关系。 这个映射关系的key是string类型而value可以是多种数据类型比如 string, list, hash、set、zset等。我们可以看到key的类型固定是string而value可能的类型是多个。
从Redis内部实现的角度来看database内的这个映射关系是用⼀个dict来维护的。dict的key固定用⼀种数据结构来表达就够了这就是动态字符串sds。而value则比较复杂为了在同⼀个dict内能够存储不同类型的value这就需要⼀个通⽤的数据结构这个通用的数据结构就是robj全名是redisObject。 Redis的encoding编码方式
Redis中会根据存储的数据类型不同选择不同的编码方式共包含11种不同类型
编号编码方式说明0OBJ_ENCODING_RAWraw编码动态字符串1OBJ_ENCODING_INTlong类型的整数的字符串2OBJ_ENCODING_HThash表字典dict3OBJ_ENCODING_ZIPMAP已废弃4OBJ_ENCODING_LINKEDLIST双端链表5OBJ_ENCODING_ZIPLIST压缩列表6OBJ_ENCODING_INTSET整数集合7OBJ_ENCODING_SKIPLIST跳表8OBJ_ENCODING_EMBSTRembstr的动态字符串9OBJ_ENCODING_QUICKLIST快速列表10OBJ_ENCODING_STREAMStream流
type对应的数据对象类型
Redis中会根据存储的数据类型不同选择不同的编码方式。每种数据类型的使用的编码方式如下
数据类型编码方式OBJ_STRINGint、embstr、rawOBJ_LISTLinkedList和ZipList(3.2以前)、QuickList3.2以后OBJ_SETintset、HTOBJ_ZSETZipList、HT、SkipListOBJ_HASHZipList、HT