redis redisObject初识

redis 基于简单动态字符串、双端链表、字典、压缩列表、整数集合、跳跃表等数据结构
提供了多种数据类型(string、list、hash、set、zset),不同的数据类型都有不同的适用
命令。例LPUSH 和 LLEN只能用于列表类型的键,DEL、 TTL 和 TYPE, 可以用于任何类型的键, 
要正确执行这些命令就需要根据当前类型执行不同的处理方式,删除String 类型 跟删除 list
过程就不同。另外当列表类型元素的大小及个数的变更,redis对其进行优化也会使得对象的类型及编码格式
发生变化。redis 键值使用的都是redisObject 对象

redisObject 源码

typedef struct redisObject {

    // 类型
    unsigned type:4;

    // 编码
    unsigned encoding:4;

    // 对象最后一次被访问的时间
    unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */

    // 引用计数
    int refcount;

    // 指向实际值的指针
    void *ptr;

} robj;
属性描述
type记录当前对象的类型 string,list,hash,set,zset
encoding对象使用的编码 int,embstr,raw,hashtable, ziplist,intset,linkedlist,skiplist
lru对象最后一次被程序访问时间 缓存淘汰时可用上
refcount引用计数 初始值为1 作用于垃圾回收
ptr对象实际值指针

不同类型编码对象

数据类型内部编码方式OBJECT ENCODING备注
stingREDIS_ENCODING_INT“int”字符串对象保存的是整数,且这个整数值可以用long类型表示
stingREDIS_ENCODING_EMBSTR“embstr”不符合 int编码标准,同时最大的字符长度<= 44字节
stingREDIS_ENCODING_RAW“raw”大于44字节同时字符长度小于 512M
listREDIS_ENCODING_ZIPLIST“ziplist”redis 3.2之前 list-max-ziplist-size -2list-compress-depth 0
listREDIS_ENCODING_LINKEDLIST“linkedlist”redis 3.2之前
listREDIS_ENCODING_QUICKEDLIST“quickedlist”redis 3.2之后 由压缩列表组成的双向列表–>快速列表
hashREDIS_ENCODING_HT“hashtable”
hashREDIS_ENCODING_ZIPLIST“ziplist”hash-max-ziplist-entries 512 hash-max-ziplist-value 64
setREDIS_ENCODING_HT“hashtable”
setREDIS_ENCODING_INTSET“intset”
zsetREDIS_ENCODING_SKIPLIST“skiplist”
zsetREDIS_ENCODING_ZIPLIST“ziplist”

在这里插入图片描述

参考

https://blog.csdn.net/weixin_39765325/article/details/111296512
https://blog.csdn.net/java_lifeng/article/details/105529667

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值