redis中有5中基本数据结构,分别为:string(字符串)、list(列表)、set(集合)、hash(哈希)和zset(有序集合)
string(字符串):Redis的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
如上图所示,内部为当前字符串实际分配的空间capacity一般高于实际字符串长度len。字符串最大长度为512M
list(列表):Redis的列表相当于Java里面的LinkedList,注意它是链表而不是数组。这意味着list的插入和删除 *** 作非常快,时间复杂度为O(1),但是索引定位很慢,时间复杂度为O(n)。Redis的列表结构常用来做异步队列使用。将需要延后处理的任务结构体序列化成字符串塞进Redis的列表,另一个线程从这个列表中轮询数据进行处理。
hash(字典):相当于Java里的HashMap,是无序字典。内部实现结构上同Java的HashMap也是一致的。Redis的字典的值只能是字符串。Java的HashMap在字典很大时,rehash是个耗时的 *** 作,需要一次性全部rehash。redis为了高性能,不堵塞服务,采用了渐进式rehash策略。
set(集合):相当于Java语言里面的HashSet,它内部的键值对是无序的唯一的。它的内部实现相当于一个特殊的字典,字典中所有的value都是一个值null。
zset(有序列表):类似于sortedSet和HashMap的结合体。set保证内部value的唯一性,另一方面它可以给每个value赋予一个score,代表这个value的排序权重。它的内部实现用的是一种叫"跳跃列表"的数据结构。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)