前言 周末被社会的皮鞭狠狠的抽打了几下。人微言轻,为生计奔波,劳碌一生。个人牢骚。今天接着来学习Redis的第三篇,字典的数据结构。...字典的数据结构其实完全可以类比Java中的HashMap数据结构,两者都是哈希表。 字典 简介说明 字典,又称为符号表 ,关联数组或映射。...是一种用于保存键值对(key-value pair)的抽象数据结构。字典中的每个键都是唯一的,通过键来更新值,或者根据键来删除整个键值对等等。...字典在Redis中的应用相当广泛,比如Redis的数据库就是使用字典作为底层实现的。对数据库的增、删、查、改操作也是构建在对字典的操作之上的。...总结 本文简单的介绍了Redis中的字典的数据结构, 它是通过哈希表节点来存储键值信息,通过链表法来处理键冲突。
Redis 的基本数据类型包括:二进制安全字符串 String、Hashes(哈希)、Lists 列表、Sets 集合 和 Sorted sets 有序集合; Redis 的特殊数据类型还包括:geospatial...String:String 是 Redis 的最基本的数据类型,一个 key 对应一个 value,String 类型是二进制安全的,意思是 Redis 的 String 可以包含任何数据,比如图片或者序列化的对象...Redis set 是string类型的无序集合。...Redis 2.8.9 版本新增的数据类型,是一种用于「统计基数」的数据集合类型,基数统计就是指统计一个集合中不重复的元素个数。...4、Stream Redis Stream 是 Redis 5.0 版本新增加的数据类型,Redis 专门为消息队列设计的数据类型。
Redis的数据类型 对于NoSQL类型的redis具有五种数据类型,如下: 字符串string 哈希hash 列表list 集合set 有序集合zset 下面来看看这五种数据类型的不同之处。...数据类型的结构 redis是key-value的数据结构,每条数据都是⼀个键值对 键的类型是字符串 注意:键不能重复 也就是说redis的存储类型 key(string) -- value(string...相关数据类型的操作命令参考文档 点击中⽂官⽹查看命令⽂档http://redis.cn/commands.html
前言 上一篇文章我们学习了Redis的数据结构之简单动态字符串,这一篇我们接着来学习Redis中另外一个数据结构-链表。...链表有很多种,首先,本文会首先回顾一下一些常见的链表,接着就是介绍Redis中的链表的结构。...循环链表的优势在于链尾到链头,链头到链尾比较方便。适合处理具有环形结构的数据。 ? 在这里插入图片描述 Redis的链表 Redis链表使用的是双端无环链表。...双端无环链表在Redis中的使用 链表在Redis中的应用非常广泛,列表对象的底层实现之一就是链表,此外如发布订阅、慢查询、监视器等功能也用到了链表,我们现在简单想一想为什么使用双端无环链表,而不是数组...总结 本文首先对链表的相关知识点做了一个回顾,简单的介绍了单链表,双端链表,循环链表。接着就是着重介绍了Redis中的链表结构,Redis的链表采用的是双端无环链表。通过list结构来操作链表。
换句话来说, 在 Redis 中, 只有能表示为 long 类型的值, 才会以整数的形式保存, 其他类型的整数、小数和字符串, 都是用 sdshdr 结构来保存。...列表 集合 ---- REDIS_SET (集合)是 SADD 、 SRANDMEMBER 等命令的操作对象, 它使用 REDIS_ENCODING_INTSET 和 REDIS_ENCODING_HT...否则,集合的初始编码为 REDIS_ENCODING_HT 。...集合编码的切换 如果一个集合使用 REDIS_ENCODING_INTSET 编码, 那么当以下任何一个条件被满足时, 这个集合会被转换成 REDIS_ENCODING_HT 编码: intset 保存的整数值个数超过...有序集合编码的转换 对于一个 REDIS_ENCODING_ZIPLIST 编码的有序集, 只要满足以下任一条件, 就将它转换为 REDIS_ENCODING_SKIPLIST 编码: ziplist
Redis集合的特性Redis集合是一个无序的、不重复的字符串元素集合,它的特性如下:无序性:集合中的元素没有特定的顺序,元素的存储顺序不重要。唯一性:集合中的元素是唯一的,相同的元素不会出现多次。...高效的插入和删除操作:Redis集合支持高效的插入和删除操作,使得它在处理成员关系、去重等场景下非常有用。...支持集合运算:Redis提供了丰富的集合运算命令,包括并集、交集、差集等,可以方便地对集合进行组合和操作。高效的成员判断:Redis集合可以快速判断一个元素是否属于集合,时间复杂度为O(1)。...Redis集合操作示例下面是一些常见的Redis集合操作示例,展示了集合的灵活性和实用性。添加元素SADD key member1 member2 ...该命令用于向集合中添加一个或多个元素。...获取所有元素SMEMBERS key该命令用于获取集合中的所有元素。计算并集SUNION key1 key2 ...该命令用于计算多个集合的并集。
空字符串也是一个有效的key。redis的key使用时,有一些建议: key最好不要太长。...中没有对应key存在的集合中push元素或者删除一个空的集合,redis需要主动的去创建空的集合或者是删除没有值的key。...A比B要排在前面,那么 A>B 它内部实现是 dual-ported数据结构 ,内部同时包含了 skip list和 hash table,每次添加元素的时间是O(lgN),但是获取的时间是常量的...,-1表示最后一个,同时返回对应元素的分数 zrevrange hackers 0 -1 //按照逆序 复制代码 Bitmaps 它并非一种数据结构,而是在string类型上定义的一种面向bit的操作。...,包括 AND OR XOR NOT bitcount:计算bit值是1的个数 bitpos:找到第一个指定的值(指定0或者1)的位置 HyperLogLogs 它是一种概率数据结构,用来统计唯一的值。
实际上,这跟两方面有关,一方面,Redis是一个内存数据库,几乎所有的操作都在内存上完成,内存的访问速度相对于磁盘来说当然是非常快的;另一方面,得益于Redis的数据结构,Redis为了更加快速高效的完成增删改查操作...,设计了一套适合于自己的数据结构,本文就Redis的数据结构进行简单分析。...一、数据类型与数据结构 常用Redis的同学可能会立刻说出,Redis有五种常用的数据类型:String(字符串)、List(列表)、Hash(哈希表)、Set(集合)、SortedSet(有序集合)。...)、ZipList(压缩列表)等,他们的对应关系如下图所示: 可以看出,除了String只使用简单动态字符串实现,其他四种数据类型都是使用底层数据结构实现的,这是因为面对不同的情况,Redis在实现一个数据类型时会使用不同的底层数据结构来优化存储...四、哈希表 哈希表是Redis字典的底层数据结构: sizemask属性的值总是等于size-1,这个属性和哈希值做&运算,决定一个键应该被放到table数组的哪个索引上。
Redis列表的特性Redis列表是一个有序的字符串元素集合,它的特性如下:有序性:列表中的元素按照插入的顺序进行存储,并且每个元素都有一个索引值来表示其在列表中的位置。...动态长度:Redis列表的长度是可以动态增长和缩小的,它可以包含最多 2^32 - 1 个元素。支持重复元素:列表中的元素可以重复,同一个值可以出现多次。...高效的插入和删除操作:Redis列表支持在列表的两端进行插入和删除操作,这使得它在实现队列、栈和消息队列等数据结构时非常有用。...支持索引访问:通过索引可以快速访问列表中的元素,从而实现快速的随机访问和修改。Redis列表操作示例下面是一些常见的Redis列表操作示例,展示了列表的灵活性和实用性。...删除指定数量的元素LREM key count value该命令用于从列表中删除指定数量的元素。count的值可以为正数、负数或0,表示删除相应数量的匹配元素。
Redis哈希的特性Redis哈希是一个键值对的集合,其中每个键都对应一个哈希表。哈希表实际上是一个包含字段和值的无序散列表。...下面是Redis哈希的一些重要特性:灵活的存储结构:哈希表中的字段和值都是字符串类型,这使得哈希数据结构非常适用于存储和操作复杂的数据结构,如对象和映射等。...高效的存储和检索:Redis以内存为存储介质,哈希表使用散列函数将键映射到内存中的位置,因此可以实现高速的数据存储和检索。对哈希表的访问时间复杂度为O(1)。...支持嵌套结构:Redis哈希可以包含其他哈希表作为值,从而实现嵌套结构。这使得开发者可以以层次化的方式组织和存储数据。...支持原子操作:Redis提供了原子操作来处理哈希表,确保在多个并发操作中保持数据的一致性。Redis哈希操作示例下面是一些常见的Redis哈希操作示例,展示了哈希的灵活性和实用性。
主要内容来源于书籍Redis实战(Redis In Action),这篇只是用来记录自己学习的过程,因为刚学所以很浅显,适合初学者哈 Redis数据结构 5种数据结构 String——字符串...Hash——字典 List——列表 Set——集合 ZSet——有序集合 下面是具体的介绍: ?...下面写写具体的使用方法,只是一些基本用法 使用方法和示例 我们使用交互的方式(redis-client)来展示这五种基本的数据结构的基本用法,实际这些数据结构和编程语言的基本类似 STRING 常用用法...以上这些只是简单的用法,旨在入门,后续会继续写更多的用法和命令
Redis 集合中所有元素都是互异的,即任意一个元素都是唯一的 [u8ddv4v23o.png?...1623749401&q-header-list=&q-url-param-list=&q-signature=40fffbaf6fe00a69c34dc501ecf3860cf08d47c8] 另外,Redis...q-url-param-list=&q-signature=0905d119fa2db9892ba9f269bdb7e063412bc7c0] 当业务场景需要对集合数据做去重处理而又不需要确保数据顺序时,Redis...哈希字典 Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。...Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 [5lfimtjs4o.png?
String 常用命令: set, get, decr, incr, mget String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字。...也是 Redis 最重要的数据结构之一,比如微博的关注列表,粉丝列表,消息列表等功能都可以用 Redis 的 list 结构来实现。...Redis list 的实现为一个双向链表,即可以支持反向查找和遍历,方便操作,虽然会带来部分额外的内存开销。...另外可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,这个很棒的一个功能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西(一页一页的往下走...Redis 可以非常方便的实现如共同关注、共同粉丝、共同喜好等功能。
一、五大数据结构 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为: STRING:字符串 LIST:列表 SET:集合 HASH:散列 ZSET:有序集合 ?...二、内部编码 实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现, 这样Redis会在合适的场景选择合适的内部编码,如下图所示 ?...关于这些数据结构的详细介绍可以参阅后续的文章 Redis这样设计有两个好处: 第一,可以改进内部编码,而对外的数据结构和命令没有影响,这样一旦开发出更优秀的内部编码,无需改动外部数 据结构和命令,例如Redis3.2...,例如ziplist比较节省内存,但是在列表元素比较多的情况下,性能会有 所下降,这时候Redis会根据配置选项将列表类型的内部实现转换为 linkedlist OBJECT ENCODING命令 该命令用来返回数据结构的内部编码...三、再说五种结构 这里我不会讲的太深入,深入的内容会在后续章节,每个数据结构作为一个专题来具体讲。 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value。
redis数据结构 String String 这应该是应用最广泛的了,简单的 key-value 类型。value 不仅可以是 String,也可以是数字。...还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。...Set Set 利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。Redis 非常人性化的为集合提供了求交集、并集、差集等操作。...Set 和 String 是在广告系统中使用最广泛的redis数据结构。...数据结构选型 一定要Set吗网上的文章讲到这里的时候都会说Redis的Set提供了一些方便的交集、并集、差集的操作。
1.Redis中的数据结构 Redis中有五种数据结构: 结构类型 结构存储的值 结构的读写能力 STRING 可以是字符串,整数,浮点数 对整个字符串或者字符串中的一部分执行操作;对整数和浮点数执行自增减操作...——描述 GET get key ——获取键的值 SET set key value——设置键的值 DEL del key——删除键的值 例子: pengjunzhe: ~$redis-cli 127.0.0.1...): import redis conn = redis.Redis() conn.get('key') conn.incr('key') 1 conn .incr('key', 15) 16 conn.decr...并将计算出来的结果保存在dest-key键里面 例子: conn = redis.Redis() conn.append("new-string-key", "hello ") 6 conn.append...列表(list)简介 Redis的一个列表可以有序的存储多个字符串。
上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中,这几种数据类型底层是由什么数据结构构造的呢?本篇博客我们就来详细介绍Redis中五大数据类型的底层实现。...这里我们就不做过多的演示了,那么上次出现的 embstr 以及 int 还有 quicklist 是什么数据结构呢?下面我们就来介绍Redis中几种主要的数据结构。...3、链表 链表是一种常用的数据结构,C 语言内部是没有内置这种数据结构的实现,所以Redis自己构建了链表的实现。关于链表的详细介绍可以参考我的这篇博客。 ...压缩列表是Redis为节省内存而开发的顺序型数据结构,通常作为列表键和哈希键的底层实现之一。 ...以上介绍的简单字符串、链表、字典、跳跃表、整数集合、压缩列表等数据结构就是Redis底层的一些数据结构,用来实现上一篇博客介绍的Redis五大数据类型,那么每种数据类型是由哪些数据结构实现的呢?
前言 上一篇文章我们介绍了字典这个数据结构,这一篇文章我们接着来学习下另外一个数据结构,跳表。那么什么是跳表呢?...跳表的基本概念 跳表是一种有序的数据结构,它通过在每个节点中维持多个指向其他的节点指针,从而达到快速访问队尾的目的。 这么说是不是感觉有点云里雾里呢?那么我们详细解释下这个概念。...在这里插入图片描述 Redis中的跳表的实现 Redis使用跳表作为有序集合的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比较长的字符串时,Redis就会使用跳表来作为有序集合键的底层实现...总结 本文介绍了跳跃表这种稍陌生的数据结构,跳表是基于单链表加索引的方式实现的,它是以空间换时间的方式来提升查找速度。...参考 Redis数据结构-跳跃表 跳跃表 《Redis的设计与实现》 带你读《Redis 5设计与源码分析》之三:跳 跃 表 17 -跳表:为什么Redis一定要用跳表来实现有序集合?
常见Redis数据结构有: String(字符串)、Hash(哈希)、List(列表)、Set(集合)和 Sorted Set(有序集合)。...其实,这些只是 Redis 键值对中 值的数据类型,也就是数据的保存形式。而这里所说的数据结构是指它们的底层实现。...它们和数据类型的对应关系如下图所示: 可以看到,String 类型的底层实现只有一种数据结构,也就是简单动态字符串。...,Redis 使用了一个哈希表来保存所有键值对。...毕竟,哈希桶的个数通常要少于 key 的数量,这也就是说,难免会有一些 key 的哈希值对应到了同一个哈希桶中。 Redis 解决哈希冲突的方式,就是链式哈希。
下面我们就来介绍Redis中几种主要的数据结构。...后面在介绍Redis的持久化时会进行介绍。 3、链表 链表是一种常用的数据结构,C 语言内部是没有内置这种数据结构的实现,所以Redis自己构建了链表的实现。关于链表的详细介绍可以参考我的这篇博客。...字典中的每一个键 key 都是唯一的,通过 key 可以对值来进行查找或修改。C 语言中没有内置这种数据结构的实现,所以字典依然是 Redis自己构建的。...压缩列表是Redis为节省内存而开发的顺序型数据结构,通常作为列表键和哈希键的底层实现之一。...以上介绍的简单字符串、链表、字典、跳跃表、整数集合、压缩列表等数据结构就是Redis底层的一些数据结构,用来实现上一篇博客介绍的Redis五大数据类型,那么每种数据类型是由哪些数据结构实现的呢?
领取专属 10元无门槛券
手把手带您无忧上云