Redis之基础数据结构

Redis之基础数据结构,第1张

Redis之基础数据结构

Redis中所有数据结构都是以唯一key字符串作为名称,然后通过这个唯一key获取相应的value,不同的数据结构类型就是指的value的类型。本文只简单介绍基础数据结构,对应数据结构的深入解析会在后面文章中叙述。

String

字符串是一种十分常见的redis数据存储结构,通常可以将数据序列化成json存储在redis中,使用时伴随着一次反序列化的过程。

Redis中的字符串是动态字符串,是可以修改的,有点类似于Java中的ArrayList,采用预分配冗余空间的方式进行存储,所获取的空间要大于实际使用的内存空间,当字符串大小小于1M的时候都是加倍现有空间,当大于1M的时候每次增加1M,同时字符串最大的容量为512M。

List

Redis中的List相当于Java中的linkedList,它是链表的数据结构,这也就导致它的新增和删除 *** 作非常快,但是查询效率非常低,当列表的最后一个元素d出后,列表自动删除,内存被回收。

Redis的List通常被用作异步队列来使用, 将任务结构体序列化成字符串放入Llist中,然后另一个线程读取处理。内部实现其实是比较复杂的,是被称之为quickList的结构来完成的。

Hash

Redis中的字典相当于Java中的HashMap,是无序字典,由数组+链表实现的,碰撞的元素有链表连接起来。不同的是Redis字典的value值只能是字符串,此外他们的rehash的方式是不同的。JDK1.7采用的是全rehash,JDK1.8采用的是部分rehash,通过高位与运算来计算是否需要移动。而Redis中采用的是渐进式的rehash策略。

它是在rehash的时候保留了新旧两种hash结构,查询时会查询到两种结构,然后在后续的定时任务和hash子指令中,循序渐进的将旧hash迁移到新hash中,当hash最后一个元素迁移完成的时候,原结构删除。

Set

Redis中的Set是一个无序集合,相当有Java中的HashSet,内部实现相当于一个特殊的字典,value都是null,当集合的最后一个元素移除的时候,原结构删除,内存被回收。

zset

zset是Redis中最为有特色的数据结构了,它类似于Java中SortedSet和HashMap的结合体,一方面保证了内部key值得唯一性,同时可以给每一个key赋予一个score值,作为排序的依据,内部实现基于跳跃列表的数据结构。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5574839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存