|NO.Z.00057|——————————|BigDataEnd|——|Hadoop&Redis.V02|——|Redis.v02|RedisDB结构.v02|
一、RedisObject结构
### --- RedisObject结构
~~~ Value是一个对象
~~~ 包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象
### --- 结构信息概览
typedef struct redisObject {
unsigned type:4; # 类型 五种对象类型
unsigned encoding:4; # 编码
void *ptr; # 指向底层实现数据结构的指针
//...
int refcount; # 引用计数
//...
unsigned lru:LRU_BITS; # LRU_BITS为24bit 记录最后一次被命令程序访问的时间
//...
}robj;
二、结构信息概览
### --- 4位type
~~~ type 字段表示对象的类型,占 4 位;
~~~ REDIS_STRING(字符串)、REDIS_LIST (列表)、REDIS_HASH(哈希)、
~~~ REDIS_SET(集合)、REDIS_ZSET(有序集合)。
~~~ # 当我们执行 type 命令时,便是通过读取 RedisObject 的 type 字段获得对象的类型
127.0.0.1:6379> type a1
string
### --- 4位encoding
~~~ encoding 表示对象的内部编码,占 4 位
~~~ 每个对象有不同的实现编码
~~~ Redis 可以根据不同的使用场景来为对象设置不同的编码,大大提高了 Redis 的灵活性和效率。
~~~ 通过 object encoding 命令,可以查看对象采用的编码方式
127.0.0.1:6379> object encoding a1
"int"
### --- 24位LRU
~~~ lru 记录的是对象最后一次被命令程序访问的时间,( 4.0 版本占 24 位,2.6 版本占 22 位)。
~~~ 高16位存储一个分钟数级别的时间戳,低8位存储访问计数(lfu : 最近访问次数)
lru----> 高16位: 最后被访问的时间
lfu----->低8位:最近访问次数
### --- refcount
~~~ refcount 记录的是该对象被引用的次数,类型为整型。
~~~ refcount 的作用,主要在于对象的引用计数和内存回收。
~~~ 当对象的refcount>1时,称为共享对象
~~~ Redis 为了节省内存,当有一些对象重复出现时,
~~~ 新的程序不会创建新的对象而是仍然使用原来的对象。
### --- ptr
~~~ ptr 指针指向具体的数据,比如:set hello world,ptr 指向包含字符串 world 的 SDS。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv012-redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」