30个常见的Redis面试问题
内容提要
Redis 是一种开源的内存键值存储,功能包括数据库、缓存和消息代理。其特点有内存存储、持久化、数据复制、分片、多数据类型支持、原子操作、发布/订阅和 Lua 脚本。适用于缓存、会话管理和实时分析等场景,支持字符串、列表、集合等数据结构。通过集群和哨兵实现高可用性和故障容错。
关键要点
-
Redis 是一种开源的内存键值存储,可以用作数据库、缓存和消息代理。
-
Redis 的主要特点包括内存存储、持久化、数据复制、分片和支持多种数据类型。
-
Redis 与传统关系数据库的区别在于其低延迟和支持非关系数据结构。
-
Redis 的常见用例包括缓存、会话管理、实时分析和消息队列。
-
Redis 支持多种数据结构,如字符串、列表、集合和哈希。
-
Redis 键是数据的唯一标识符,支持二进制安全和命名约定。
-
Redis 缓存通过使用高性能的内存存储来提高应用程序响应速度。
-
使用 SET 命令可以在 Redis 中设置值,使用 GET 命令可以检索值。
-
EXPIRE 命令用于设置键的超时时间,超时后自动删除该键。
-
SETEX 命令可以在一个命令中设置键值及其过期时间。
-
Redis 的驱逐策略决定了在达到最大内存限制时如何处理内存。
-
LRU 驱逐策略会在内存限制达到时驱逐最近最少使用的键。
-
FLUSHALL 命令用于清除 Redis 中所有数据库的所有键。
-
Redis 提供 RDB 快照和 AOF 日志两种持久化方法。
-
Redis 集群是一个分布式实现,自动将数据分片到多个节点。
-
复制是将数据从主节点复制到从节点,而集群则在多个主节点之间分区数据。
-
TTL 命令返回设置过期的键的剩余生存时间。
-
Redis 的发布/订阅模式允许多个发布者通过频道向多个订阅者发送消息。
-
Redis 列表是有序的字符串集合,允许重复元素,而集合是无序的唯一字符串集合。
-
有序集合是与分数关联的唯一元素集合,支持基于分数的范围查询。
-
在 Web 应用中实现 Redis 缓存的常见模式是先检查缓存,再查询数据库。
-
Redis 事务通过 MULTI 命令开始,执行一系列命令后用 EXEC 提交。
-
Redis 管道允许一次发送多个命令,减少往返时间,提高吞吐量。
-
Redis Sentinel 用于管理和监控 Redis 实例,确保高可用性。
-
Redis 是单线程执行命令,避免了应用层的并发问题。
-
Redis 支持 Lua 脚本以原子方式执行命令序列,适用于需要原子操作的场景。
-
mget() 用于一次检索多个键的值,减少多次往返的开销。
-
Redis Streams 是用于管理日志数据的数据结构,支持消费者组和消息确认。
-
通过复制、集群和 Sentinel,可以扩展 Redis 以实现高可用性和容错。
延伸问答
Redis 的主要特点是什么?
Redis 的主要特点包括内存存储、持久化、数据复制、分片、支持多种数据类型、原子操作、发布/订阅和 Lua 脚本。
Redis 如何与传统关系数据库不同?
Redis 是一种内存键值存储,具有极低的延迟,而传统关系数据库通常基于磁盘并使用结构化查询语言(SQL)进行数据检索。
Redis 支持哪些数据结构?
Redis 支持字符串、列表、集合、有序集合、哈希、位图、HyperLogLogs、流和地理空间索引等数据结构。
如何在 Redis 中设置键值?
使用 SET 命令可以在 Redis 中设置键值,例如:SET key value。
Redis 的持久化方法有哪些?
Redis 提供两种持久化方法:RDB 快照和 AOF(追加文件),后者记录每个写操作以实现更持久的存储。
Redis 的发布/订阅模式是什么?
Redis 的发布/订阅模式允许多个发布者通过频道向多个订阅者发送消息,实现实时通信。