面试题答案
一键面试- 基本原理:
- 在渐进式rehash过程中,Redis会同时保留新旧两个哈希表。
- 读操作时,Redis会先尝试从新哈希表中读取数据。如果在新哈希表中未找到,再从旧哈希表中读取。
- 并发控制机制:
- 单线程模型:Redis是单线程执行命令的。这意味着在同一时刻,只会有一个读或写操作在执行,不存在传统多线程环境下的线程竞争问题。例如,当一个读操作在进行时,不会有其他写操作同时修改哈希表结构,从而保证了数据一致性。
- 锁机制(从侧面保障):虽然Redis是单线程,但底层数据结构的实现会使用一些锁机制来保证数据结构的完整性。在进行rehash时,虽然是渐进式的,但在对哈希表进行一些关键操作(如修改哈希表的节点指针等)时,会有相应的内部机制确保操作的原子性,避免在rehash过程中读操作获取到不一致的数据。
- 数据迁移逻辑:在渐进式rehash过程中,每次迁移一小部分数据。读操作按照先新表后旧表的顺序读取,这样即使在数据迁移过程中,也能保证读到的数据是最新的(只要新表中有)。如果新表没有,旧表中的数据也是完整的(因为还未迁移完的数据在旧表中保持原状),从而确保了数据的正确性。