下面我将为你详细讲解“熟悉这几道 Redis 高频面试题(面试不用愁)”的完整攻略。
前言
Redis 是一种基于内存的键值型数据库系统,并支持多种数据结构,如 字符串、哈希、列表、集合、有序集合 等等。Redis 的出现大大提高了数据操作效率,因此在高并发场景下使用较为广泛。不少公司在面试中都会考察 Redis 相关的知识点,因此我们有必要对 Redis 基本特征和常见问题进行深入学习。
常见面试题
1. Redis 和 Memcached 有哪些区别?
- Redis 支持更多的数据类型,如字符串、哈希、列表、集合、有序集合 等,而 Memcached 只能支持简单的 Key-Value 结构。
- Redis 执行命令的速度更快,因为 Redis 使用单线程,避免了线程切换带来的开销,而且 Redis 的原生支持 Lua 脚本功能,能够支持事务和多数据库,并且支持持久化存储。
- Memcached 只支持内存存储,而 Redis 可以将数据持久化到磁盘;另外,Redis 可以实现数据的 Master-Slave 复制,以及 Sentinel 机制的高可用性部署。
2. Redis 持久化有哪两种方式?
Redis 支持两种主要的持久化方式:
- RDB(Redis DataBase) 持久化方式,将数据保存到磁盘中,实现数据恢复功能。RDB 在特定的时间节点上会将当前内存中 Redis 数据生成快照(Snapshot),并保存到磁盘上的 RDB 文件中。这种方式可以通过配置文件来设置产生快照的时间,也可以通过save和bgsave命令手动触发。
- AOF(Append Only File)持久化方式:Redis 将所有执行的命令都添加到 AOF 文件的最后(比如 append-only.aof 文件),这种方式具有更好的可靠性和灵活性,可以通过 AOF 文件恢复更完整的数据。AOF文件的写入速度比 RDB 方式更慢,但更加安全,因此建议AOF记录通过bgwrite()函数缓冲写入磁盘。
3. Redis 的过期键的实现原理是什么?
Redis 使用惰性删除和定期删除两种策略来清除过期键。
- 惰性删除:每次获取 key 的时候,会检查这个 key 是否已经过期。如果过期,就删除它。这种方式会导致大量的过期键没有及时清除,依旧存储在内存中。
- 定期删除:Redis 会每隔一段时间(默认每秒钟)扫描一遍设置了过期时间的 key,将过期键清除。这种方式的优点是操作简单,缺点是无法保证每个过期键都会被及时清除。
4. Redis 的主从复制机制是什么?
Redis 的主从复制机制是用于实现高可用性的重要机制之一。主从复制机制可以让主节点的数据(同步)复制到从节点上,从而实现数据的实时备份,从而提高系统的可用性。
Redis 主从同步分为全量同步和增量同步两个过程。
- 全量同步:当从节点初次启动时,会发送 sync 命令给主节点,主节点接收到 sync 命令以后会执行 BGSAVE 命令生成一个 RDB 文件,然后把这个 RDB 文件发送给从节点,从节点接收到以后会存储到本地,完成数据的全量同步。
- 增量同步:全量同步后,主节点会将所有更新的数据同步给从节点,增量同步中的主节点只发送 newitem 等更新操作命令,从节点自生成这些命令从而完成部分增量数据同步。
总结
本文介绍了面试中常见的 Redis 相关问题,包括 Redis 和 Memcached 的区别,Redis 的持久化方式,过期键的实现原理,以及 Redis 的主从复制机制。掌握这些知识点不仅有助于我们在面试中更好地表现自己,而且对于我们在实际项目中的 Redis 使用也非常有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:熟悉这几道 Redis 高频面试题(面试不用愁) - Python技术站