Redis数据结构? map底层实现?什么时候压缩列表什么时候哈希表?
时间: 2024-06-05 13:10:58 浏览: 196
Redis数据结构包括:字符串(string)、哈希表(hash)、列表(list)、集合(set)、有序集合(sorted set)。Map底层实现一般使用哈希表,在键比较小的时候使用压缩列表,可以占用更少的空间。具体来说,当一个列表中存储的所有元素的长度都小于64字节,并且这个列表中元素个数小于512个时,Redis就会使用压缩列表来实现列表结构。但当有新元素要加入到列表中,而此时列表中已有元素个数超过了512时,Redis就会将压缩列表转化为常规列表,也即是基于链表实现的列表结构。
而哈希表则是一种更加通用的底层实现,哈希表可以支持更大的键值对数量,同时也可以提供更高效的访问速度,因此哈希表成为了Redis的默认底层实现方式。
相关问题
redis的hash
回答: Redis的Hash是一种键值对类型的集合,类似于Java中的Map。它适合用来存储对象,可以通过对象的唯一标识作为key,而将其他对象信息存储为对应的value。Redis中的Hash类型对应的底层数据结构有两种:ziplist(压缩列表)和hashtable(哈希表)。当field-value长度较短且个数较少时,Redis会使用ziplist作为底层数据结构;否则,会使用hashtable。[2]为了解决Redis中Hash类型的扩容问题,Redis采用了渐进式rehash方式。具体步骤是,为Hash表分配空间,同时持有两个哈希表ht[0]和ht[1],并维护一个索引计数器变量rehashidx。在进行rehash期间,每次对Hash表执行操作时,程序会将ht[0]哈希表在rehashidx索引上的所有键值对rehash到ht[1],并将rehashidx属性的值增一。当所有键值对都被rehash到ht[1]后,程序将rehashidx属性的值设为-1,表示rehash操作已完成。[1]所以,Redis的Hash类型是一种灵活且高效的数据结构,适用于存储对象和进行快速的键值对操作。
阅读全文