1. 简言

redis中使用对象来表示数据库中的键和值

每当我们在redis的数据库中新建立一个键值对时,redis会至少创建两个对象,一个对象用作键,一个对象用作值,其中键的对象一定是字符串对象,值的对象是字符串,列表,哈希,集合,有序集合中的一种

2. 实现

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

typedef struct redisObject {// 类型unsigned type:4;// 编码unsigned encoding:4;// 指向底层实现数据结构的指针void* ptr;// ...
} robj;

3. type属性

type属性记录了对象的类型,这个属性的值对应如下表

类型常量 对象的名称 TYPE命令的返回值
REDIS_STRING 字符串对象 string
REDIS_LIST 列表对象 list
REDIS_HASH 哈希对象 hash
REDIS_SET 集合对象 set
REDIS_ZSET 有序集合对象 zset

备注:当我们对一个数据库键执行TYPE命令时,会返回数据库键对应的值对象的类型

例子:

redis> SET msg "hello world"
OK
redis> TYPE msg
stringredis> HMSET profile name Tom age 25 career Programmer
OK
redis> TYPE profile
hash

4. encoding属性

encoding属性记录了对象所使用的的编码,也就是说这个对象使用了什么数据结构作为对象的底层实现

这个属性的值对应如下表

编码常量 编码所对应的的底层数据结构 OBJECT EN CODING 命令的返回
REDIS_ENCODING_INT long类型的整数 int
REDIS_ENCODING_EMBSTR embstr编码的字符串 embstr
REDIS_ENCODING_RAW 简单动态字符串 raw
REDIS_ENCODING_HT 字典 hashtable
REDIS_ENCODING_LINKEDLIST 双端列表 linkedlist
REDIS_ENCODING_ZIPLIST 压缩列表 ziplist
REDIS_ENCODING_INTSET 整数集合 intset
REDIS_ENCODING_SKIPLIST 跳跃表 + 字典 skiplist

备注:当我们对一个数据库键执行OBJECT ENCODING命令时,会返回数据库键对应的值对象的类型

例子:

redis> SET msg "hello world"
OK
redis> OBJECT ENCODING msg
embstrredis> SET story "long long long long long long long long long long long long long..."
OK
redis> OBJECT ENCODING story
raw

5. type属性和encoding属性的对应关系

类型(type属性) 编码(encoding属性) 注释
REDIS_STRING REDIS_ENCODING_INT 整数值实现的字符串(是整数时则使用long表示)
REDIS_STRING REDIS_ENCODING_EMBSTR embstr编码的简单动态字符串实现的字符串(字符串长度小于等于32字节时)
REDIS_STRING REDIS_ENCODING_RAW 简单动态字符串实现的字符串(字符串长度大于32字节时)
REDIS_LIST REDIS_ENCODING_ZIPLIST 压缩列表实现的列表(每个元素大小小于64字节 且 元素数小于512个)
REDIS_LIST REDIS_ENCODING_LINKEDLIST 双向链表实现的列表(某个元素大小大于64字节 或 元素数大于512个)
REDIS_HASH REDIS_ENCODING_ZIPLIST 压缩列表实现的哈希表(每个元素大小小于64字节 且 元素数小于512个)
REDIS_HASH REDIS_ENCODING_HT 字典实现的哈希表(某个元素大小大于64字节 或 元素数大于512个)
REDIS_SET REDIS_ENCODING_INTSET 整数集合实现的集合(每个元素都是整数 且 元素数不超过512个)
REDIS_SET REDIS_ENCODING_HT 字典实现的集合(某个元素不是整数 或 元素数超过512个)
REDIS_ZSET REDIS_ENCODING_ZIPLIST 压缩列表实现的有序集合(每个元素大小小于64字节 且 元素数小于128个)
REDIS_ZSET REDIS_ENCODING_SKIPLIST 使用跳跃表+字典实现的有序集合(某个元素大小大于64字节 或 元素数超过128个)

总结redis中对象的类型与编码相关推荐

  1. Redis中对ZSet类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  2. zset获取指定score_7、Redis中对ZSet类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  3. redis中对象存储内存占用预估和相关对象

    redis中数据类型的使用,并发问题,list重复插入问题,redis使用实例-简单消息队列和排名统计_深山猿的博客-CSDN博客_redis 不重复的list java对象应该存成string还是m ...

  4. Redis 中的集合类型是怎么实现的?

    本文是<Redis内部数据结构详解>系列的第七篇.在本文中,我们围绕一个Redis的内部数据结构--intset展开讨论. Redis里面使用intset是为了实现集合(set)这种对外的 ...

  5. 判断 JS 中对象的类型

    1.typeof 形如 var x = "xx"; typeof x == 'string' typeof(x) 返回类型有:'undefined' "string&qu ...

  6. 判断js中对象的类型

    1.typeof  形如 var x = "xx";  typeof x == 'string' 返回类型有:'undefined' "string" 'num ...

  7. redis中不同value类型的存取操作方式

    public class CacheController {public static void main(String[] args) throws Exception {CacheClientHA ...

  8. Redis对象类型与编码

    Redis中常见的类型有 string (字符串) list (列表) set (集合) zset (有序集合) hash (哈希) 而他们的底层实现都是由其他的数据结构实现 接下来就会按照这个表来依 ...

  9. 理解 redis 中的 集合对象类型

    这篇我们来看看Redis五大类型中的第四大类型:集合类型,集合类型还是蛮有意思的,第一个是因为它算是只使用key的Dictionary简易版,这样说来的话,它就比Dictionary节省很多内存消耗, ...

最新文章

  1. 服务器信息采集协议,服务器信息采集
  2. Android Bluetooth模块学习笔记
  3. 【Win32API】SendInput ERROR_BUSY 错误原因
  4. 周报速递丨《网络安全审查办法》修订发布;微信支持数字人民币支付
  5. java用thinkpadx1_还用老的办公本? 处理文件速度怎够用
  6. 更新!机器学习手推笔记《规则学习》
  7. redis数据类型set总结
  8. Wifite批量破解WEP/WPA/WPS
  9. c语言课后答案详解,c语言课后练习题答案详解_0.doc
  10. Java 工程师修炼之道
  11. php mac开启socket,mac上nginx以socket的方式连接php-fpm出现502错误?
  12. 【艾琪出品】《计算机应用基础》【试题汇总10】
  13. 极简效率指南:数据分析师如何高效工作和提升自己
  14. 定位服务北斗位置云服务器,北斗位置云服务平台操作使用指南(157页)-原创力文档...
  15. MySQL官方示例数据库的使用
  16. layUi upload单文件上传,重复上传的问题
  17. centos(7.9) minikube(v1.28.0) kaniko 构建镜像
  18. ffmpeg 音频拼接
  19. 解决,电脑开机显示正在准备自动修复,正在诊断你的电脑 问题
  20. jw player 源码编译运行笔记

热门文章

  1. 有没有通过代码退出程序的方法--官方解答
  2. My github blog
  3. CodeForces - 1562D2 Two Hundred Twenty One (hard version)(二分)
  4. 2020CCPC(长春) - Strange Memory(树上启发式合并+位运算)
  5. Gym - 101972A Multiplication Dilemma(模拟)
  6. 语言for循环联程_Lua循环
  7. excel函数去重_Python中实现Excel的重复值提取
  8. L1-045. 宇宙无敌大招呼
  9. SPOJ1812(后缀自动机求n个串的最长公共子串)
  10. Lua 和 C 交互中虚拟栈的操作和遍历