redis对象模型

在这里插入图片描述

  • type
    在这里插入图片描述
  • encoding
    在这里插入图片描述

一.字符串对象

字符串对象如果保存的是整数值,编码为int。
字符串对象如果保存的是长度大于32字节的字符串,编码为raw。
字符串对象如果保存的是长度小于等于32字节的字符串,编码为embstr。
在这里插入图片描述
embstr调用一次内存分配函数分配一块连续的空间存放redisObject和sdshdr。
raw需要调用两次分别分配redisObject和sdshdr的内存空间。
浮点数类型也是按照字符串值保存。
在这里插入图片描述

二.列表对象

列表对象保存的元素长度都小于64字节,并且元素数量小于512个时,编码为ziplist。
反之,编码为linkedlist。
在这里插入图片描述

三.哈希对象

哈希对象保存的元素长度都小于64字节,并且元素数量小于512个时,编码为ziplist。
反之,编码为hashtable。
在这里插入图片描述

四.集合对象

集合对象保存的所有元素都是整数值,并且元素数量不超过512个时,编码为intset。
反之,编码为hashtable。
在这里插入图片描述
在这里插入图片描述

五.有序集合

有序集合保存的元素数量小于128个,长度都小于64字节,编码为ziplist。
反之,编码为skiplist。
skiplist编码的有序集合对象使用zset结构实现,一个zset包含一个字典和一个跳跃表。
在这里插入图片描述
在这里插入图片描述
字典和跳跃表只保存一份元素的成员和分值,通过指针来实现共享元素。
字典根据成员查找分值效率高,跳表范围操作效率高,所以使用二者结合。
在这里插入图片描述

六.类型检查和多态

部分命令只能对特定对象类型执行。在执行特定命令时,redis先会检查类型是否正确。
根据对象的编码确定调用不同的命令函数实现多态。

七.内存回收

引用计数实现内存回收。
在这里插入图片描述

八.对象共享和计时

在redis中让多个键的值指针指向一个对象,并在共享的值对象的引用计数值加1。
在这里插入图片描述
在这里插入图片描述
lru记录对象最后一次被访问的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值