Redis之对象篇——Redis对象系统简介

优惠码领取 2019-08-21

redis 数据库 type 数据结构

Redis之对象篇——Redis对象系统简介

Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,而每种对象又通过不同的编码映射到不同的底层数据结构。

一、Redis对象类型和编码#

Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性、 encoding属性和ptr属性:

Redis使用对象来表示数据库中的键和值,每次当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的健(键对象),另一个对象用作键值对的值(值对象)。

Copy
typedef struct redisObiect{

//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层数据结构的指针
void *ptr;

}

其中Redis的键对象都是字符串对象,而Redis的值对象主要有字符串、哈希、列表、集合、有序集合几种。其分别对应的内部编码和底层数据结构如下图所示:

二、思考一个问题#

Redis中的对象,大都是通过多种数据结构来实现的,为什么会这样设计呢?用一种固定的数据结构来实现,不是更加简单吗?

Redis这样设计有两个好处:

可以自由改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令,例如Redis3.2提供了quicklist,其结合了ziplist和linkedlist两者
的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来说基本感知不到。 这一点比较像程序设计中的分层架构。
多种内部编码实现可以在不同场景下发挥各自的优势,从而优化对象在不同场景下的使用效率。例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候Redis会根据配置选项将列表类型的内部实现转换linkedlist。 (后续文章将根据具体对象介绍)
本文重点#
Redis基于底层的一些数据结构创建了一个对象系统以供用户使用
这个系统主要包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象
Redis的键对象都是字符串对象
Redis的值对象主要有字符串、哈希、列表、集合、有序集合几种
为了可以自由改进内部编码,以及在不同场景下发挥其最大优势,Redis中的对象,大都是通过多种数据结构来实现
参考#
《Redis设计与实现》

《Redis开发与运维》

《Redis官方文档》

-----END-----#
作者: 崖边小生

出处:https://www.cnblogs.com/hunternet/p/11386610.html

登录 后评论
下一篇
冒顿单于
9014人浏览
2019-08-28
相关推荐
最详细的大数据学习路线图
1054人浏览
2019-04-13 14:51:15
Redis简介以及数据类型存储
607人浏览
2015-07-21 08:50:03
认识ssm框架和Redis
749人浏览
2018-09-27 16:50:00
Redis快速入门及应用
13094人浏览
2018-03-22 17:10:26
Redis使用手册
1670人浏览
2014-08-18 11:38:00
Redis使用手册
1562人浏览
2014-08-18 11:38:00
redis 简介
735人浏览
2016-04-13 09:20:00
NoSQL--Redis简介
569人浏览
2017-11-16 16:22:00
0
0
0
149