类型与编码:

  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)保留跳跃表执行范围型操作的优点

转载于:https://www.cnblogs.com/songxh-scse/p/6692433.html

Redis学习笔记之Redis的对象相关推荐

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

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

  2. zset获取指定score_redis zset更新score redis学习笔记5 - Redis - 服务器之家

    redis zset更新score redis学习笔记5 发布时间:2017-04-03 来源:服务器之家 一:概述 zset全称为sorted-sets类型,和set数据类型有极为相似,都是字符串的 ...

  3. Redis学习笔记 - 内存回收、对象共享、对象的空转时长

    参考:<<Redis设计与实现>> 注:这本书是基于Redis3.0版本写的,和后面的版本有点差异 一.内存回收 C语言不具备自动内存回收功能,所以Redis在自己的对象系统中 ...

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

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

  5. redis学习笔记(三)--Redis的功能

    慢查询 基本概念 慢查询日志记录命令执行前后的超时的执行时间.(只记录命令执行时间) 慢查询的两个配置 Redis提供了slowlog-log-slower-than和slowlog-max-len两 ...

  6. Redis学习笔记~分布式的Pub/Sub模式

    redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日 ...

  7. Redis运维和开发学习笔记(4) Redis参数意义

    Redis运维和开发学习笔记(4) Redis参数意义 文章目录 Redis运维和开发学习笔记(4) Redis参数意义 参数意义 参数意义 Client连接 问题 id=567800790 addr ...

  8. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

  9. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

最新文章

  1. [ 1001] 动态开辟二维数组的说明
  2. SAP销售订单-订单组合
  3. 记录yarn被攻击的解决办法
  4. spring javaee_开发人员对Spring vs JavaEE的看法
  5. getDate()返回日期不一致问题引发的bug
  6. 18-数据持久化-Data Volume
  7. ajax get post
  8. python列表转集合_Python数据类型 列表、元组、集合、字典的区别和相互转换
  9. javac无效问题解决
  10. 如何更改mssq,SSAS l代理运行身份验证
  11. [UWP]了解模板化控件(8):ItemsControl
  12. 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
  13. 代码整洁之道-读书笔记
  14. VMware虚拟机中激活Windows Server 2008的具体步骤
  15. linux find查找文件后缀名,CentOS 7 find命令及文件名后缀的介绍
  16. leetcode No5 最长回文子串
  17. 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
  18. <a>链接下载视频 而不是打开新页面播放
  19. 洛谷 P5663 [CSP-J2019] 加工零件(最短路)
  20. 编译android源码刷机到Nexus5x

热门文章

  1. 学习Java中遇到的问题积累_1
  2. python3 numpy中矩阵np.dot(a,b)乘法运算
  3. pip/conda导出 requirements.txt 注意事项
  4. LeetCode 2075. 解码斜向换位密码(模拟)
  5. LeetCode 1910. 删除一个字符串中所有出现的给定子字符串
  6. LeetCode 1007. 行相等的最少多米诺旋转
  7. LintCode 1210. 升序子序列(DFS)
  8. plotplay恢复默认设置_手把手解答win10系统potplayer经常弹出自动更新提示的还原技巧...
  9. collections求和方法_java集合求和最大值最小值示例分享
  10. 职高计算机选修6知识点,(计算机基础考试7.doc