面试题答案
一键面试触发动态扩展的情况
当要设置的二进制位数组的偏移量(offset)超出当前位数组所分配的内存大小时,会触发动态扩展。例如,执行 SETBIT key offset value
操作,如果 offset
大于当前位数组的长度,就需要扩展位数组。
扩展的基本机制
- 内存分配:Redis 会根据需要扩展的大小,重新分配内存。它使用动态内存分配函数(如
realloc
)来分配一块更大的内存空间。 - 数据迁移:将原有的二进制位数组数据从旧的内存区域复制到新分配的内存区域。这样可以保证原有的数据不丢失。
- 初始化新区域:新分配的内存区域中,未被原有数据覆盖的部分会被初始化为 0,以确保新扩展的二进制位都处于默认状态。