面试题答案
一键面试新增操作
- 在渐进式 rehash 过程中:
- 当执行新增键值对操作时,Redis 会将新的键值对直接插入到新的哈希表中。这是因为新哈希表是为了最终替代旧哈希表而构建的,将新数据直接插入新表有助于加速 rehash 过程的完成。例如,假设有一个简单的 Redis 哈希结构存储用户信息,当新增一个用户信息键值对时,该键值对会被插入到新哈希表中。
- 对新旧哈希表的影响:
- 对新哈希表:新哈希表的大小是根据 rehash 策略确定的(通常是旧哈希表大小的两倍),新增操作增加了新哈希表中的元素数量,使其逐步承载更多的数据。例如,若新哈希表初始为空,随着新增操作,新哈希表的元素逐渐增多。
- 对旧哈希表:旧哈希表的数据不会因新增操作而发生变化,它仍然保留原有的键值对,直到 rehash 过程将其对应键值对迁移到新哈希表。
删除操作
- 在渐进式 rehash 过程中:
- 当执行删除键值对操作时,Redis 会首先检查旧哈希表中是否存在该键值对。如果存在,则从旧哈希表中删除。如果旧哈希表中不存在,再检查新哈希表,若新哈希表中有,则从新哈希表中删除。这是因为在 rehash 过程中,部分数据可能还在旧哈希表中,需要先从旧表查找删除,确保数据一致性。例如,要删除一个已存在的用户信息键值对,首先在旧哈希表查找删除。
- 对新旧哈希表的影响:
- 对旧哈希表:如果在旧哈希表中找到并删除键值对,旧哈希表中的元素数量会减少,从而减少后续需要迁移到新哈希表的数据量。例如,原本旧哈希表有 100 个元素,删除一个后变为 99 个。
- 对新哈希表:若在旧哈希表中未找到,而在新哈希表中找到并删除,新哈希表的元素数量相应减少。这样在渐进式 rehash 过程中,新旧哈希表的状态都因为删除操作而发生改变,维持数据的准确和一致性。