Redis对象系统

对象

Redis 是一个键值对(key-value pair)数据库,数据库中的每个键都有与之对应的值,并且这些键和值都是对象(object)

  • 键总是一个字符串对象(String Object)。

  • 而值则可以是字符串对象、列表对象(List Object)、散列对象(Hash Object)、集合对象(SetObject)或者有序集合对象(Sorted Set Object / Zset Object)中的任意一个,这五种对象分别对应我们在 Redis 数据库中操作的字符串键值对(SET、BITOP、PFADD)、列表键值对(RPUSH、LRANGE)、散列键值对(HADD、HLEN)、集合键值对(SADD、SMEMBERS)和有序集合键值对(ZADD、ZRANGE)

对象的实现

Redis 中的每种对象都有与之相对应的底层数据结构,并且为了让对象在各种不同的应用场景下都有优秀的性能表现,Redis 为每种对象都提供了两种类型的数据结构实现:

  • 第一类是为了进行性能优化而特制的编码数据结构(encoded data structure),这些数据结构主要使用“以 CPU 换内存的方式”来节约内存。编码数据结构主要在对象包含的值数量比较少、或者值的体积比较小时使用:比如在字符串对象包含的字符串比较短时,集合只包含三五个小元素时,又或者列表只包含十来个项时,这些情况都可以使用编码数据结构。
  • 另一类是普通数据结构,也即是我们在书上、论文上看见的数据结构,比如双向链表、字典、跳跃表等等。比起编码数据结构,这些普通的数据结构需要消耗更多内存,但是能 够提供更强大的功能,普通数据结构主要在对象包含的值比较多、或者值的体积比较大时使用。
    在创建新对象时,Redis 会优先使用编码数据结构来表示对象,并在有需要时,自动将对象的表示方式转换为普通数据结构。
数据结构

编码数据结构(储存一个值对数据进行压缩,降低内存的使用,数据量小的数据会使用):

  • 压缩列表(zip list)
  • 整数集合(int set)

普通数据结构:

  • 简单动态字符串(SDS, simple dynamic string)
  • 双向链表
  • 字典
  • 跳跃表

对象使用的数据结构

  • 字符串对象(string): SDS
  • 列表对象(list): 双向列表 、压缩列表
  • 散列表对象(hash): 字典 、压缩列表
  • 有序集合对象(set): 跳跃表 、压缩列表
  • 集合对象(zset): 字典 、整数集合
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 使用对象的好处:在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。2.可以针对不同的使用场景,为...
    黑金星阅读 254评论 0 1
  • 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站...
    小陈阿飞阅读 813评论 0 1
  • 转载:可能是目前最详细的Redis内存模型及应用解读 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据...
    jwnba24阅读 636评论 0 4
  • 本章主要讲述了如何全身心的倾听对方,需要放下自己原有的想法,判断和观点,就是全神贯注的去体会对方的感受。做到这一点...
    Tina的人生笔记阅读 458评论 4 6
  • https://juejin.im/entry/5d14d9695188255d74399c95
    莫夏_b560阅读 152评论 0 0