美文网首页
Redis对象——Redis对象系统简介

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

作者: 小波同学 | 来源:发表于2023-06-30 22:44 被阅读0次

前言

Redis用到的所有主要数据结构为:简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合、跳跃表。

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

一、Redis对象类型和编码

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

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

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

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


二、思考一个问题

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

Redis这样设计有两个好处:

  • 1、可以自由改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数据结构和命令,例如Redis3.2提供了quicklist,其结合了ziplist和linkedlist两者的优势,为列表类型提供了一种更为优秀的内部编码实现,而对外部用户来说基本感知不到。 这一点比较像程序设计中的分层架构。

  • 2、多种内部编码实现可以在不同场景下发挥各自的优势,从而优化对象在不同场景下的使用效率。例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有所下降,这时候Redis会根据配置选项将列表类型的内部实现转换linkedlist。

参考:
https://www.laoyu.site/2019/%E6%8A%80%E6%9C%AF%E5%AE%9E%E8%B7%B5/redis/Redis%E5%AF%B9%E8%B1%A1%E2%80%94%E2%80%94Redis%E5%AF%B9%E8%B1%A1%E7%B3%BB%E7%BB%9F%E7%AE%80%E4%BB%8B/

相关文章

  • redis对象之列表对象

    承接上文redis对象之字符串对象 参考文献:黄健宏《Redis设计与实现》 前言 列表对象是redis对象系统中...

  • 第 8 章(对象)

    Redis Object Redis 基于之前的那些数据结构创建了一个系统对象,这个系统包含字符串对象、列表对象、...

  • Redis对象类型和底层数据结构

    Redis对象类型(类型常量:对象名称) REDIS_STRING: 字符串对象 REDIS_LIST: ...

  • Redis的五种对象类型及其底层实现

    Redis对象类型简介 Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的...

  • Redis对象系统

    数据结构 编码转化 String 当存储的值可以表示为64位整数时,使用OBJ_ENCODING_INT实现 当存...

  • redis

    类型常量 对象的名称REDIS_STRING 字符串对象REDIS_LIST 列表对象REDIS_H...

  • Redis数据类型(一)-对象系统

    Redis数据类型-Redis的对象系统 Redis有五种数据类型,String、List、Hash、Set、Zs...

  • redis数据结构--对象

    redis使用对象系统来构建键值对数据库,这个对象系统包括:字符串对象,列表对象,哈希对象,集合对象和有序集合对象...

  • redis中的对象

    redis的对象包含5种对象: 字符串对象 列表对象 哈希对象 集合对象 有序集合对象 redis对象的好处 针对...

  • redis对象

    一 redis是怎样实现键值对数据库的redis使用对象系统来实现键值对数据库,这个系统包括:字符串对象、列表对...

网友评论

      本文标题:Redis对象——Redis对象系统简介

      本文链接:https://www.haomeiwen.com/subject/xrptudtx.html