前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题40:redisObject结构主要包含什么?redisObject的编码有哪些?

面试题40:redisObject结构主要包含什么?redisObject的编码有哪些?

作者头像
爪哇缪斯
发布2023-05-09 21:42:33
1290
发布2023-05-09 21:42:33
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

【Redis对象】

  • 首先在介绍String类型之前,我们先了解一下什么是redis对象,如下图所示:
代码语言:javascript
复制
redis.h
/*
 * redis对象
 */
typedef struct redisObject {
    // 对象的类型(取值范围:REDIS_STRING, REDIS_LIST, REDIS_HASH, REDIS_SET, REDIS_ZSET)
    unsigned type:4;
  
    // 对象的编码(取值范围:REDIS_ENCODING_INT, REDIS_ENCODING_EMBSTR, REDIS_ENCODING_RAW, REDIS_ENCODING_HT, REDIS_ENCODING_LINKEDLIST,REDIS_ENCODING_ZIPLIST,REDIS_ENCODING_INTSET,REDIS_ENCODING_SKIPLIST)
    unsigned encoding:4;
  
    // 指向底层实现数据结构的指针
    void *ptr;
  
    unsigned notused:2;     /* Not used */
    unsigned lru:22;        /* lru time (relative to server.lruclock) */
    int refcount;   
} robj;
  • type——对象类型

每当我们在redis中新建一个键值对的时候,我们至少会创建两个对象:一个是key的对象,一个是value的对象。key对象总是一个字符串类型的对象,而值对象,则会是5种对象类型中的任意一种。 如下图所示:

  • 可以通过TYPE key命令查看当前value的类型,如下所示:
代码语言:javascript
复制
127.0.0.1:6379> set muse java
OK
127.0.0.1:6379> type muse
string
127.0.0.1:6379> rpush queue 1 3 4 5
(integer) 4
127.0.0.1:6379> type queue
list

【encoding编码】

  • ptr指向对象的底层实现数据结构,而这些数据结构由encoding属性决定。通过encoding属性来设定对象所使用的编码,而不是为特定类型的对象关联一种固定的编码,极大地提升了Redis的灵活性和效率,因为Redis可以根据不同的使用场景来为一个对象设置不同的编码,从而优化对象在某一场景下的效率。
  • encoding编码与数据结构的对应关系如下所示:
  • 其中,每种类型的对象都至少使用了两种不同的编码。如下所示:
  • 可以通过OBJECT ENCODING key命令查看当前value的类型,如下所示:
代码语言:javascript
复制
127.0.0.1:6379> OBJECT encoding muse
"embstr"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档