Redis01——Redis究竟支持哪些数据结构

Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指正。

简介

Redis共支持五种数据结构,分别是string(字符串)、hash(字典)、list(列表)、set(集合)、zset(有序集合)。

详解

string(字符串)

数据结构:Redis中string数据结构为动态字符数组,采用预分配冗余空间的方式来减少内存分配。

扩容机制:当字符串长度小于1MB时,扩容都是加倍现有空间。当字符串长度大于1MB时,每次扩容1MB,最大长度为512MB。

计数:当值为整数时,可以进行自增操作。范围为signed long 的最大值和最小值之间。

hash(字典)

数据结构:Redis中list相当于Java的HashMap。

渐进式rehash:在Redis中针对hash冲突采用的是渐进式rehash操作。渐进式rehash会同时保留新旧两个hash结构,查询时同时查询两个hash结构。在后续的定时任务及hash操作的过程中完成从旧hash结构,迁移到新hash结构的过程。

list(列表)

数据结构:Redis中list相当于Java的LinkedList,所以写操作时间复杂度为O(1),读操作时间复杂度为O(n)。

set(集合)

数据结构:Redis中set相当于Java的HashSet。

zset(有序集合)

数据结构:Redis中zset类似于一个带权值(score)的SortedSet。其内部通过跳跃列表(关于跳跃列表,将会在后期的文章中进行分享)实现。

总结

1.通用规则

hash、list、set、zset这四种数据结构为容器型数据结构,所有容器型数据结构遵守以下规则:

  1. create if not exists:当容器不存在时,需先创建一个容器,再进行操作;

  2. drop if not elements:当容器内无元素时,会立即删除容器,释放内存。

2.过期时间

过期时间以对象为单位,如整个hash结构。

当string被set方法修改后,过期时间将会失效。

原文地址:https://www.cnblogs.com/weechang/p/12454431.html