redis的数据类型都是通过多种数据结构来实现,主要是出于时间和空间的考虑,当数据量小的时候通过数组下标访问最快,占用内存最小【压缩列表是数组的变种,允许存储的数据大小不同】

因为数组需要占用连续的内存空间,所以当数据量大的时候,就需要使用链表,同时为了保证速度又需要和数组结合,也就有了散列表。

1、字符串

2、列表(list):支持存储一组数据,这种数据类型对应两种实现方法,一种是压缩列表,另一种是双向循环链表

压缩列表:数据集比较少的时候,采用压缩列表

redis自己设计的一种存储结构,类似数组,通过一片连续的内存空间来存储数据,但它允许存储的数据大小不同

条件:

  • 列表中保存的单个数据小于64个字节
  • 列表中数据个数少于512个

优点:

  • 节省内存
  • 支持不同类型数据的存储
  • 数据存储在一片连续的内存空间,通过键来获取值为列表类型的数据,读取效率也非常高。
双向循环链表:数据量比较大时,列表使用双向循环链表实现
 
3、字典(hash):存储一组数据对,每个数据对又包含键值两部分。

压缩列表:数据集比较少的时候,采用压缩列表

条件:

  • 列表中保存的键和值的大小都小于64个字节
  • 列表中键值对个数少于512个

散列表:数据量比较大,不满足上述条件,使用散列表实现。

redis使用MurmurHash2这种运行速度快,随机性好的哈希算法作为哈希函数,对于哈希冲突,redis使用链表法来解决。

redis支持散列表的动态扩容、缩绒。

4、集合(set):一种是基于有序数组,一种是基于散列表。

有序数组:

条件:

  • 存储的数据都是整数
  • 存储的数据元素个数不超过512个

散列表:

5、有序集合(sort set):

用来存储一组数据,并且每个数据会附带一个得分。通过得分的大小,我们将数据组织成跳表这样的数据结构,以支持快速地按照得分值、得分区间获取数据。

压缩列表:数据集比较少的时候,采用压缩列表

条件:

  • 保存的数据小于64个字节
  • 元素个数小于128个

跳表:

redis常用数据类型对应的数据结构的更多相关文章

  1. Redis常用数据类型介绍、使用场景及其操作命令

    Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...

  2. Redis常用数据类型

    Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html     Redis最为常用的数据类型主要有以下五种: ●Str ...

  3. Redis常用数据类型及各种数据类型应用和实现方式

    Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...

  4. Redis常用数据类型以及操作

    Redis常用数据类型以及操作 目录 Redis常用数据类型以及操作 一.String数据类型 1. SET/GET/APPEND/STRLEN 2. INCR/DECR/INCRBY/DECRBY ...

  5. Redis常用数据类型和事物以及并发

    Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...

  6. Redis常用数据类型及其存储结构(源码篇)

    一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...

  7. redis之 Redis常用数据类型

    Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令:  set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...

  8. Redis不同数据类型的的数据结构实现

    我们知道Redis支持五种数据类型, 分别是字符串.哈希表(map).列表(list).集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的. >>Re ...

  9. Redis常用数据类型及使用场景

    Redis最为常用的数据类型 字符串(String) 字符串列表(list) 字符串集合(set) 哈希(hash) 有序的字符串集合(sorted set) String(字符串) 字符串是最基本的 ...

随机推荐

  1. Flutter-desktop

    flutter-desktop-embedding video windows $ flutter channel master && flutter upgrade 更新你的 flu ...

  2. Flutter 删除AppBar的返回icon

    设置automaticallyImplyLeading: false即可,替换可以修改"leading"参数 ... appBar: AppBar( automaticallyIm ...

  3. Mila Fletcher:日常理财应注意的五点

    米拉·弗莱彻于2007年毕业于耶鲁大学,她是一名真正意义上的法学博士,在校期间获得了马歇尔奖学金,毕业后曾在美国多家知名律师事务所任职,目前就职于星盟全球投资公司,专注于帮助公司和客户提供法务咨询,他 ...

  4. 【Android初级】如何实现一个有动画效果的自定义下拉菜单

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  5. epoll原理详解及epoll反应堆模型

    本文转载自epoll原理详解及epoll反应堆模型 导语 设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻 ...

  6. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. ...

  7. Ability之间或者进程间数据传递之对象(Sequenceable序列化)

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 这两天51cto上的一个粉丝朋友问了我一个问题,Ability之间使用Sequenceable序列化传 ...

  8. Python - Asyncio模块实现的生产消费者模型

    [原创]转载请注明作者Johnthegreat和本文链接 在设计模式中,生产消费者模型占有非常重要的地位,这个模型在现实世界中也有很多有意思的对应场景,比如做包子的人和吃包子的人,当两者速度不匹配时, ...

  9. Java 集合框架 03

    集合框架·HashSet 和 TreeSet HashSet存储字符串并遍历 * A:Set集合概述及特点 * 通过API查看即可 * 无索引,不可以重复,无序 * B:案例演示 * HashSet存 ...

  10. go-优雅地关机或重启

    目录 优雅地关机或重启 优雅地关机 什么是优雅关机? 如何实现优雅关机? 优雅地重启 总结 优雅地关机或重启 我们编写的Web项目部署之后,经常会因为需要进行配置变更或功能迭代而重启服务,单纯的kil ...