类型与编码:

  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. 【Alpha 冲刺】 4/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 完成API文档编写 已完成 会遗漏一些部分的api,但是通过群里询问以及对页面的review解决 孙浩楷 根据UI设计, 实现左侧 ...

  2. Eclipse 中怎样自动格式化代码?

    首先 有一个 检查代码风格的工具叫checkstyle,具体怎么下载,请自行百度.. 当你在eclipse安装好 checkstyle后,对于使用google标准的人来说,选择一个项目,右键,点击ch ...

  3. 浏览器中上传Excel文件,服务器获取Excel字段。写入的数据库中。操作Excel的方式jxl和poi。

    从Excel中获取字段,官方给我们提供了方法,地址https://poi.apache.org/components/spreadsheet/quick-guide.html#CellContents ...

  4. [转]在C++中容易出现的#error No Target Architecture

    项目环境:win 7 64位,编译环境:VS2013 最近在写C++的项目,发现了自己很多不会的地方,这也使得我在C++中的成长变得比较快,下面我就说说我自己在写项目是遇到的一些问题,希望可以帮到一些 ...

  5. Python2.7-io

    io 模块,用于处理流数据,在 python2 下,是内置 file 对象的另一种选择,在 python3 下,此模块是默认的文件和流数据的接口. 1.模块继承关系 IOBase--RawIOBase ...

  6. Android 一s个相对完整的自动升级功能实现代码

    由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...

  7. HDU 2159 FATE(有选择物品总个数限制的完全背包,经典!!)

    FATE Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. NSDictionary实现原理-ios哈希hash和isEqual

    NSDictionary实现原理-ios哈希hash和isEqual   OC中自定义类的NSCopying实现的注意事项(isEqual & hash实现) http://blog.csdn ...

  9. mysql中查看一个字段中,有几个逗号

    利用replace.length的内置函数

  10. Linux CentOS7系统中phpMyAdmin安装配置

    今天介绍的是如何在Linux CentOS7系统中配置phpMyAdmin. 目录 环境准备 安装包 基本设置 网站预览 环境准备 linux centos7系统 ssh软件 php语言环境 mysq ...