阅读 67

redis基本类型

11redis基本类型

redis中的每个对象都由一个redisObject结构来表示:

/*  * Redis 对象  */ typedef struct redisObject {     // 类型     unsigned type:4;             // 不使用(对齐位)     unsigned notused:2;     // 编码方式     unsigned encoding:4;     // LRU 时间(相对于 server.lruclock)     unsigned lru:22;     // 引用计数     int refcount;     // 指向对象的值     void *ptr; } robj; 复制代码

和保存数据有关的三个属性是type、encoding和ptr属性。

对象类型分为下边这几个,我们是用type命令可以查看对象类型

/*  * 对象类型  */ #define REDIS_STRING 0 #define REDIS_LIST 1 #define REDIS_SET 2 #define REDIS_ZSET 3 #define REDIS_HASH 4 复制代码

对象的ptr指针指向对象的底层实现数据结构,这些数据结构由对象的encoding属性决定。

编码类型

/*  * 对象编码  *  * 像 String 和 Hash 这样的对象,可以有多种内部表示。  * 对象的 encoding 属性可以设置为以下域的任意一种。  */ #define REDIS_ENCODING_RAW 0     /* Raw representation 简单动态字符串*/ #define REDIS_ENCODING_INT 1     /* Encoded as integer long类型的整数*/ #define REDIS_ENCODING_HT 2      /* Encoded as hash table 字典*/ #define REDIS_ENCODING_ZIPMAP 3  /* Encoded as zipmap 压缩字典*/ #define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list 双端链表*/ #define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist 压缩列表*/ #define REDIS_ENCODING_INTSET 6  /* Encoded as intset 整数集合*/ #define REDIS_ENCODING_SKIPLIST 7  /* Encoded as skiplist 跳跃表和字典*/ #define REDIS_ENCODING_EMBSTR 8  /* Embedded sds string encoding embstr编码的简单动态字符串*/ 复制代码

可以通过object encoding命令查看数据库键的值对象的编码

通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大提升了redis的灵活性和效率,根据不同的使用场景来为对象设置不同的编码

不同数据结构的编码方式:

类型编码对象
REDIS_STRINGREDIS_ENCODING_INT使用整数值实现的字符串对象

REDIS_ENCODING_EMBSTR使用embstr编码的简单动态字符串实现的字符串对象

REDIS_ENCODING_RAW使用简单动态字符串实现的字符串对象
REDIS_LISTREDIS_ENCODING_ZIPLIST使用压缩列表实现的列表对象

REDIS_ENCODING_LINKEDLIST使用双端链表实现的列表对象
REDIS_HASHREDIS_ENCODING_ZIPLIST使用压缩列表实现的哈希对象

REDIS_ENCODING_HT使用字典实现的哈希对象
REDIS_SETREDIS_ENCODING_INTSET使用整数集合实现的集合对象

REDIS_ENCODING_HT使用字典实现的集合对象
REDIS_ZSETREDIS_ENCODING_ZIPLIST使用压缩列表实现的有序集合对象

REDIS_ENCODING_SKIPLIST使用跳跃表和字典实现的有序集合对象


作者:周杰倫本人
链接:https://juejin.cn/post/7025822456627593230

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐