redis面试题 | 青训营

42 阅读3分钟

Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景

Redis5个基本数据结构以及底层实现

  1. 字符串(string):字符串是 Redis 最基本的数据结构,它可以存储文本、整数或二进制数据。Redis 使用简单动态字符串(SDS)作为字符串的底层实现。SDS 是一种可变长度的字符串,它比 C 语言中的传统字符串更加灵活和高效。

  2. 列表(list):列表是一个有序的字符串集合,可以在列表的两端进行插入和删除操作。Redis 使用双端链表作为列表的底层实现。双端链表允许在表头和表尾快速进行插入和删除操作。

  3. 哈希(hash):哈希是一种键值对集合,其中的值可以是字符串或整数。Redis 使用哈希表作为哈希的底层实现。哈希表使用类似于 Java 中的 HashMap 的数据结构,通过哈希函数将键映射到桶(bucket)上,并在桶中存储键值对。

  4. 集合(set):集合是一组唯一且无序的字符串集合。Redis 使用哈希表作为集合的底层实现。哈希表中的键用于存储集合中的元素,而值被设置为固定的常量,以节省内存。

  5. 有序集合(sorted set):有序集合是一组唯一且有序的字符串集合,每个字符串都关联着一个分数。Redis 使用跳跃表(skip list)和哈希表作为有序集合的底层实现。跳跃表是一种有序的链表数据结构,通过多级索引来加快查找操作的速度。

通过使用这些基本数据结构,Redis 提供了丰富的功能,如缓存、计数器、排行榜、发布-订阅等。Redis 的底层实现使得它能够高效地处理大量的读写操作,并具有良好的扩展性和高可用性。

redis的过期策略有哪些

Redis 是一种常用的内存键值存储系统,它提供了多种过期策略用于设置键的过期时间。以下是 Redis 中常见的过期策略:

  1. 定时删除策略(TTL):在设置键的同时,指定一个过期时间(Time To Live,TTL),Redis 会自动在该时间过后删除键。在每次访问键时,Redis 会检查键是否过期,并在需要时删除过期的键。这是 Redis 最常用的过期策略。

  2. 惰性删除策略(Lazy expiration):在访问键时,Redis 不会立即检查键是否过期。而是等到下一次访问键时再进行检查,并在需要时删除过期的键。这个策略可以减少对过期键的检查频率,提高性能。

  3. 定期删除策略(Eviction):Redis 会以一定的频率(默认每秒钟10次),随机地检查一些键是否过期,并删除过期的键。这个策略用于处理那些被惰性删除策略漏掉的键。

  4. 主动清除策略(Active expiration):除了上述的过期策略,Redis 还会在一些特定的操作中主动检查并删除过期键。例如,当执行读写操作时,如果发现键已过期,Redis 会立即删除过期的键,然后返回空值。

需要注意的是,Redis 的过期策略是基于策略组合的。即,Redis 会根据具体的情况综合使用多种过期策略,以提供高效的键管理和过期处理。这种组合策略可以保证 Redis 在处理大量键时能够高效地删除过期键,并释放内存空间。