redis常见面试题汇总

我想请问下,redis常见面试题汇总
最新回答
人家有伞,我有大头。

2024-11-05 00:26:33

redis为什么读写速度快?

redis是一种高性能的 K-V 数据库,官方称单机可支持10w/qps。其速度优势主要源于以下几点:

1. 内存存储:redis将数据存储在内存中,读写操作无需磁盘I/O,这极大地提高了速度。

2. 数据结构优化:redis支持多种数据结构,如字符串、哈希表、列表、集合、有序集合,这些结构优化了数据操作,提高了效率。

3. 单线程处理:redis采用单线程模型处理请求,避免了多线程间的上下文切换开销。

4. 缓存穿透与击穿优化:redis通过过期策略、缓存双删等机制,避免了缓存穿透与缓存击穿的问题,进一步提升了性能。

redis为什么是单线程?

redis采用单线程模型,其原因包括:

1. 避免多线程上下文切换开销:单线程模型避免了多线程间的上下文切换,减少了性能损耗。

2. 简化代码与维护:单线程模型代码逻辑相对简单,易于理解和维护。

3. 高性能与稳定性:单线程模型在处理并发请求时,能够保持高性能与系统稳定性。

redis和memcached的区别?

1. 数据结构:redis支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合,可以更好地适应不同场景;memcached仅支持键值对。

2. 存储方式:redis数据可以持久化到磁盘,memcached不支持持久化。

3. 处理模式:redis为单线程处理,memcached为多线程模型。

4. 高可用性:redis通过主从复制和哨兵机制提供了高可用性,memcached为单节点部署。

redis的常用数据结构有哪些?

redis的常用数据结构包括:

1. string:简单的K-V类型,用于计数、统计等场景。

2. list:链表结构,适用于消息队列、慢查询等场景。

3. hash:类似HashMap,适合存储系统对象数据。

4. set:无序去重集合,适用于存放不能重复的数据。

5. zset:带有权重的有序集合,适用于直播礼物排行榜等场景。

6. bitmap:二进制数字存储,适用于状态信息存储。

redis的持久化机制?

redis的持久化机制包括:

1. RDB:Redis DataBase,快照式持久化,以快照文件的形式存储数据状态。

2. AOF:Append Only File,命令日志式持久化,记录所有写操作命令。

3. 混合持久化:结合RDB与AOF的优点,文件开头为RDB格式,后续为AOF格式。

redis过期时间如何设置?如何续期?

redis可以通过SETEX、EXPIRE等命令设置过期时间,过期后数据自动删除。若需要续期,可使用RENEW命令。

redis的淘汰策略和过期策略?有什么区别?

过期策略用于自动删除过期的键,淘汰策略用于在内存不足时决定删除哪些键。过期策略是基于时间的,淘汰策略则是基于内存占用。

如何保证redis和mysql的数据一致?

1. 先写MySQL,再删除Redis,保证数据一致性。
2. 更新数据库+更新缓存,对缓存命中率影响较大。
3. 双删策略,先删Redis,再写MySQL,再删Redis。
4. 监听binlog,将更新操作导入MQ,下游消费后更新缓存。

缓存常见问题及其解法?

1. 缓存穿透/击穿:使用双删、时间戳等策略解决。
2. 缓存雪崩:采用分布式缓存系统,如Redis集群。
3. 数据不一致:保证读写操作的一致性,使用乐观或悲观锁。
4. HotKey/热key:采用流量控制、缓存分片等策略。
5. BigKey:优化key设计,使用分片或压缩技术。

redis主从复制的原理?作用?

主从复制通过主节点向从节点异步复制数据,确保数据一致性。作用包括数据冗余、高可用性、负载均衡。

redis集群是如何保证各节点数据一致的?

redis集群通过槽分区、一致性哈希算法、主从复制和哨兵机制保证数据一致性。

redis高可用架构如何实现?

采用主从模式、哨兵模式或redis cluster集群模式实现高可用。

redis主节点的key已过期,但从节点依然可以读到,为什么?怎么解决?

从节点未立即同步过期删除操作。解决方法包括:使用EXPIREAT/PERSIST、设置volatile-ttl、业务逻辑判断key是否过期。

redis如何实现队列?

使用列表数据结构的两端操作(LPOP/RPOP)实现队列的FIFO特性。

lua脚本的执行流程?执行lua脚本,如何保障redis集群数据一致性?

lua脚本执行包括加载、编译和执行三个阶段。redis集群内部有同步机制,确保数据一致性。

redission的使用场景

用于分布式锁、高可用性和高性能需求的场景,如大规模和高可用性应用。

redis zset的实现原理?

zset使用zipList和skipList存储结构,zipList适用于小型zset,skipList用于大型zset,以优化查询性能。

特别大的zset,应该如何删除?

采用分批次删除或使用unlink异步删除策略,避免阻塞。

什么是redis脑裂?如何解决?

脑裂是指主从集群中产生两个主节点,导致数据丢失。解决方法包括限制主库请求处理、使用哨兵机制。