美文网首页redis系列
redis数据结构(五):redis对象 robj

redis数据结构(五):redis对象 robj

作者: 范柏柏 | 来源:发表于2020-05-30 13:30 被阅读0次

综述

什么是robj

  • 简单动态字符串 SDS
  • 链表 list
  • 跳表 skiplist
  • 压缩列表 ziplist
  • 快速列表 quicklist
  • 字典 dict
  • 整数集合 intset

这些都是底层数据结构。rediis并不会直接对外使用。redis会把他们再封装一层对外使用,封装的这一层就是robj。

使用robj的好处是:

  • 可以针对不同的使用场景为对象设置多种不同类型的对象。从而优化对象在不同使用场景下的使用效率。

  • robj还实现了基于引用计数的内存回收机制,回收内存。另外redis还基于引用计数实现了对象共享机制,通过让redis键共享同一个对象来节约内存。

来看看数据结构

typedef struct redisObject {

    // 类型
    unsigned type:4;
    
    // 编码
    unsigned encoding:4;
    
    // 指向底层实现数据结构的指针
    void *ptr;
    
    // 引用计数
    int refcount;
    
    // 空转时长
    unsigned lru:22;
}

类型:指的是对外的类型
编码:指的是对内的数据结构

对外的类型 type

类型常量 对象的名称
REDIS_STRING 字符串对象
REDIS_LIST 列表对象
REDIS_HASH 哈希对象
REDIS_SET 集合对象
REDIS_ZSET 有序集合对象

字符串对象

字符串对象.png

列表对象

列表对象.png

哈希对象

哈希对象.png

集合对象

集合对象.png

有序集合对象

有序集合对象.png

对内数据结构 encoding

编码常量 所对应的底层数据结构
REDIS_ENCODING_INT long类型整数
REDIS_ENCODING_EMBSET embstr编码的SDS
REDIS_ENCODING_RAW SDS
REDIS_ENCODING_HT 字典
REDIS_ENCODING_LINKEDLIST 双向链表
REDIS_ENCODING_ZIPLIST 压缩列表
REDIS_ENCODING_SKIPLIST 跳表
REDIS_ENCODING_INTSET 整数集合

使用object encoding 命令可以打印出 编码

编码.png

类型和编码的搭配

类型 编码 对象
string int 使用整数值实现的字符串对象
string embstr 使用embstrSDS实现的字符串对象
string raw 使用SDS实现的字符串对象
list ziplist 使用压缩列表实现的列表对象
list linkedlist 使用双向链表实现的列表对象
hash ziplist 使用压缩列表实现的哈希对象
hash ht 使用字典实现的哈希对象
set intset 使用整数集合实现的集合对象
set ht 使用字典实现的集合对象
zset ziplist 使用压缩列表实现的有序集合对象
zset skiplist 使用跳表和字典实现的有序集合对象

相关文章

  • redis数据结构(五):redis对象 robj

    综述 什么是robj 简单动态字符串 SDS 链表 list 跳表 skiplist 压缩列表 ziplist 快...

  • Redis专题

    1 数据结构与对象 1.Redis数据结构与对象——简单动态字符串2.Redis数据结构与对象——哈希3.Redi...

  • Redis -nosql[note1]

    Redis nosql redis install redis支持五种数据结构 string list hash ...

  • Redis设计与实现-笔记(一)

    数据结构与对象 Redis的底层数据结构,了解Redis的底层数据结构有助于我们更好的运用Redis。 SDS R...

  • 01-redis数据结构与对象

    3. redis数据结构与对象 redis对外支持数据结构 字符串 (string) 字符串列表(list) 字符...

  • Redis 5种数据类型与11种编码方式

    1,redis核心对象结构 1)Redis object对象的数据结构,定义在src/server.h中。 2)c...

  • 第 8 章(对象)

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

  • redis对象

    本文对redis的对象进行概述,知识来源于《redis设计与实现》 我们可知,redis的用到的主要的数据结构有简...

  • Redis--对象

    对象的作用 1.redis未直接采用上述的几种数据结构 2.redis的键值对,key是对象,value也是对象。...

  • 【Redis缓存】- Redis数据结构、基本命令操作、持久化

    一、Redis 数据结构 要想使用 Redis 进行数据存储,首先需要了解 Redis 的数据结构,redis存储...

网友评论

    本文标题:redis数据结构(五):redis对象 robj

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