redis常用数据类型对应的数据结构

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

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

1、字符串

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

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

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

条件:

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

优点:

  • 节省内存
  • 支持不同类型数据的存储
  • 数据存储在一片连续的内存空间,通过键来获取值为列表类型的数据,读取效率也非常高。

双向循环链表:数据量比较大时,列表使用双向循环链表实现

3、字典(hash):存储一组数据对,每个数据对又包含键值两部分。

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

条件:

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

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

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

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

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

有序数组:

条件:

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

散列表:

5、有序集合(sort set):

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

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

条件:

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

跳表:

原文地址:https://www.cnblogs.com/wjh123/p/11439705.html

时间: 2024-07-29 20:45:46

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

数据结构与算法简记--redis常用数据类型对应的数据结构

Redis常用数据类型对应的数据结构 Redis数据库 Redis 是一种键值(Key-Value)数据库.相对于关系型数据库(比如 MySQL),也被叫作非关系型数据库. 常用的数据类型: 字符串.列表.字典.集合.有序集合. 列表(list) 支持存储一组数据.两种实现方法: 压缩列表(ziplist) 双向循环链表 压缩列表 数据量比较小的时候采用压缩列表的方式实现: 列表中保存的单个数据(有可能是字符串类型的)小于 64 字节: 列表中数据个数少于 512 个. 非基础数据结构,类似数组

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

Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字典) 4.Set(集合) 5.Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令. 1. String(字符串) String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字.String在redis内部存储默认就是一个字符串,被

Redis常用数据类型

Redis目前支持5种数据类型 分别是:1.String(字符串)2.List(列表)3.Hash(字典)4.Set(集合)5.Sorted Set(有序集合) 下面就分别介绍这五种数据类型及其相应的操作命令.1. String(字符串)String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字.String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObje

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

我们知道Redis支持五种数据类型, 分别是字符串.哈希表(map).列表(list).集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的. >>Redis中的redisObject对象 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象, 通过结构体来模仿面向对象编程的“多态”,作为一个底层的数据支持,redisObject代码: /* * Redis 对象 */ typedef struct redisObject {

redis常用数据类型总结

redis是以键值对key-value的形式来存储数据,而存储的数据类型有5种String,List,Set,Map,以及有序集合 这五种数据类型操作的命令多有相似,经常混淆,闲暇之余,总结一番. 类型一:String 1append key value 如果key存在,则把value追加到原来的value后面 如果可以不存在,则以key为键,value为值建立新的. 2get key 返回key所关联的字符串.如果key不存在则返回nil 3bitcount key 返回给定字符串中,被设置为

redis常用数据类型介绍

String类型的常用命令: type key_name:查看某个key是什么类型的 >help @STRING #查看string类型的帮助 set key value [EX|NX|XX] :设定一个键值 EX表示过期时间,单位是s NX表示当此key存在时不创建,如果不存在则创建 XX表示当此key存在时修改 mset:一次设置多个key get:获取某个key的value mget:一次获取多个key的value append:在指定key的values后边追加新的内容 del:删除某个

Redis常用数据类型及应用场景之String

这里提一点,如果要存对象到redis里的话,有两种可以考虑的实现方案 1,用set,也即将对象转换为一个json,然后存到一个key里 2,用Mset,也即将对象中的每一个属性,单独Set到Redis里,每个属性的key用id:属性名来标识 这两种方式,从效率上讲,第二种要高很多 原文地址:https://www.cnblogs.com/hopeiscoming/p/12591402.html

Redis常用数据类型及应用场景之ZSet

后面再列举一些Redis其他的一些应用场景 原文地址:https://www.cnblogs.com/hopeiscoming/p/12591323.html

Redis常用数据类型及应用场景之Set

这里SDiff是差集的意思 原文地址:https://www.cnblogs.com/hopeiscoming/p/12591316.html