类型与编码:

  typedef struct redisObject {

                unsigned type:4;//类型

                unsigned encoding:4;//编码

                void *ptr;//指向底层实现数据结构的指针

  } robj;

1.字符串对象

  编码: int,整数值,而且这个整数值可以用long类型来表示

  raw,字符串值,而且字符串值的长度大于32字节,SDS的内存与redisObject内存不连续

  embstr,字符串值,而且字符串值的长度小于32字节,SDS的内存与redisObject内存是连续的

        编码转换:当对字符串进行操作时引起字符串类型变化,那么字符串对象的编码也会随即改变,比如在一个10后面加上“days ago”,那么字符串的编码将从int变为raw

2.列表对象

  编码: ziplist,需满足以下两个条件1)列表对象保存的所有字符串元素的长度都小于64字节(可修改);2)列表对象保存的元素数量小于512个(可修改)

           linkedlist,不满足上述两个条件的列表对象编码都采用linkedlist

  笔者实际操作之后发现,不管什么情况,结果都如下:

  127.0.0.1:6379> object encoding test

  "quicklist"

      quicklist:A doubly linked list of ziplists,一个ziplist的双向链表

3.哈希对象

  编码: ziplist,先将一个键值对的键推到表尾,然后将这个键值对的值推到表尾,同样需要满足以下两个条件1)哈希对象保存的所有键值对的键和值得字符串长度都小于64(可修改)字节2)哈希对象保存的键值对的数量小于512(可修改)

hashtable,底层采用字典实现

4.集合对象

  编码:intset,集合对象使用整数集合作为底层实现,条件1)集合对象保存的所有元素都是整数2)集合对象保存的元素个数不超过512个

hashtable,使用字典作为底层实现,字典的每一个值都是一个字符串对象,每个字符串对象都包含一个集合元素,字典的值全部为null

5.有序集合对象

  编码:ziplist,使用压缩列表作为底层实现,要求1)有序集合保存的元素数量小于128,2)有序集合保存的所有元素成员的长度都小于64字节

skiplist,使用zset作为底层实现,一个zset结构同时包含一个字典和一个跳跃表;同时使用字典和跳跃表是为了1)保留字典以O(1)的时间复杂度查找成员的分值这一特性2)保留跳跃表执行范围型操作的优点

Redis学习笔记之Redis的对象的更多相关文章

  1. Redis学习笔记(4) Redis事务、生存时间及排序

    1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...

  2. StackExchange.Redis学习笔记(一) Redis的使用初探

    Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化. 与其它键值数据存储相比,Redis有一组相对丰富的数据类型. Redis可以将数据复制到任意数量的从机中 Redis的安装 官 ...

  3. Redis学习笔记(1) Redis介绍及基础

    1. Redis的特性 (1) 存储结构 Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis支 ...

  4. redis学习笔记之redis简介

    redis简介 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求.同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不 ...

  5. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置

    0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...

  6. Redis学习笔记(六) 对象

    前面我们看了Redis用到的主要数据结构,如简单动态字符串(SDS).双向链表.字典.压缩列表.整数集合等. 但是Redis并没有直接使用这些数据结构来实现键值对,而是基于这些数据结构创建了一个对象系 ...

  7. redis学习笔记(三)——redis的命令大全总结

    总结了一些redis五种存储类型的常用命令以及一些通用操作命令,不是很全,是在学习的时候将学到的做了个汇总,使用的时候可以查一下. 笔记写在表格里面了,不好粘贴.......后面的直接截图了..... ...

  8. Redis学习笔记(2) Redis基础类型及命令之一

    1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...

  9. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...

随机推荐

  1. 'javac' 不是内部或外部命令,也不是可运行的程序

    今天在命令行中运行javac命令时发现 但是运行java命令却可以 查找jdk的安装路径发现,安装目录里面同时有jdk的文件夹和jre的文件夹 查看了jdk的目录发现jdk目录中也有一个jre文件夹 ...

  2. SDN2017 第四次作业

    1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控制器 ht ...

  3. 阿里八八Alpha阶段Scrum(10/12)

    今日进度 叶文滔: 正在解决日程模块合并至主项目的问题 俞鋆: 完成了上传和下载头像的api,完善了登陆和注册的api 李嘉群: 正在尝试json文件的转化和发送请求 黄梅玲: 学习json数据解析和 ...

  4. 页面元素固定在页面底部的纯css代码(兼容IE6)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Netty入门(七)使用SSL/TLS加密Netty程序

    为了支持 SSL/TLS,Java 提供了 javax.net.ssl API 的类 SslContext 和 SslEngine 使它相对简单的实现解密和加密.Netty 利用该 API 实现了 C ...

  6. [SDOI2008]洞穴勘测

    嘟嘟嘟 写完lct的板儿后觉得这就是一道大水题. 连pushup都不用. 不过还是因为一个zz的错误debug了一小会儿(Link的时候连出自环--) 还有一件事就是Cut的时候判断条件还得加上,因为 ...

  7. Spring之Method Injection

    对于Spring的多数用户而言,主要的Bean存在形式都是单例,当一个单例需要结合另一个单例协作或者一个非单例与另一个非单例协作时,典型的做法是通过属性的形式注入,但是当两个Bean的声明周期不同时候 ...

  8. 【转】Android实战技巧之四十九:Usb通信之USB Host

    零 USB背景知识 USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一. 硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头 ...

  9. oneinstack远程管理数据库

    本篇文章主要内容是本地工具连接数据非网页(网站)连接 如果你想使用网页(网站)连接远程数据库,请看下面的官网教程 OneinStack如何配置MySQL远程连接? 为了安全考虑,OneinStack仅 ...

  10. Docker技术入门与实战 第二版-学习笔记-1-镜像

    镜像与容器之间的关系: 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体.容器可以被 创建.启动.停止.删除.暂停 ...