总结redis中对象的类型与编码
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中对象的类型与编码相关推荐
- Redis中对ZSet类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- zset获取指定score_7、Redis中对ZSet类型的操作命令
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...
- redis中对象存储内存占用预估和相关对象
redis中数据类型的使用,并发问题,list重复插入问题,redis使用实例-简单消息队列和排名统计_深山猿的博客-CSDN博客_redis 不重复的list java对象应该存成string还是m ...
- Redis 中的集合类型是怎么实现的?
本文是<Redis内部数据结构详解>系列的第七篇.在本文中,我们围绕一个Redis的内部数据结构--intset展开讨论. Redis里面使用intset是为了实现集合(set)这种对外的 ...
- 判断 JS 中对象的类型
1.typeof 形如 var x = "xx"; typeof x == 'string' typeof(x) 返回类型有:'undefined' "string&qu ...
- 判断js中对象的类型
1.typeof 形如 var x = "xx"; typeof x == 'string' 返回类型有:'undefined' "string" 'num ...
- redis中不同value类型的存取操作方式
public class CacheController {public static void main(String[] args) throws Exception {CacheClientHA ...
- Redis对象类型与编码
Redis中常见的类型有 string (字符串) list (列表) set (集合) zset (有序集合) hash (哈希) 而他们的底层实现都是由其他的数据结构实现 接下来就会按照这个表来依 ...
- 理解 redis 中的 集合对象类型
这篇我们来看看Redis五大类型中的第四大类型:集合类型,集合类型还是蛮有意思的,第一个是因为它算是只使用key的Dictionary简易版,这样说来的话,它就比Dictionary节省很多内存消耗, ...
最新文章
- 服务器信息采集协议,服务器信息采集
- Android Bluetooth模块学习笔记
- 【Win32API】SendInput ERROR_BUSY 错误原因
- 周报速递丨《网络安全审查办法》修订发布;微信支持数字人民币支付
- java用thinkpadx1_还用老的办公本? 处理文件速度怎够用
- 更新!机器学习手推笔记《规则学习》
- redis数据类型set总结
- Wifite批量破解WEP/WPA/WPS
- c语言课后答案详解,c语言课后练习题答案详解_0.doc
- Java 工程师修炼之道
- php mac开启socket,mac上nginx以socket的方式连接php-fpm出现502错误?
- 【艾琪出品】《计算机应用基础》【试题汇总10】
- 极简效率指南:数据分析师如何高效工作和提升自己
- 定位服务北斗位置云服务器,北斗位置云服务平台操作使用指南(157页)-原创力文档...
- MySQL官方示例数据库的使用
- layUi upload单文件上传,重复上传的问题
- centos(7.9) minikube(v1.28.0) kaniko 构建镜像
- ffmpeg 音频拼接
- 解决,电脑开机显示正在准备自动修复,正在诊断你的电脑 问题
- jw player 源码编译运行笔记
热门文章
- 有没有通过代码退出程序的方法--官方解答
- My github blog
- CodeForces - 1562D2 Two Hundred Twenty One (hard version)(二分)
- 2020CCPC(长春) - Strange Memory(树上启发式合并+位运算)
- Gym - 101972A Multiplication Dilemma(模拟)
- 语言for循环联程_Lua循环
- excel函数去重_Python中实现Excel的重复值提取
- L1-045. 宇宙无敌大招呼
- SPOJ1812(后缀自动机求n个串的最长公共子串)
- Lua 和 C 交互中虚拟栈的操作和遍历