面试题答案
一键面试Redis二进制位数组基本存储结构
Redis中二进制位数组是基于字符串实现的。一个字符串由多个字节组成,每个字节包含8位。所以二进制位数组中的位会按顺序填充到字节中,从字节的低位开始填充。例如,对于一个长度为10位的二进制位数组,会占用2个字节,第一个字节存放前8位,第二个字节存放剩余2位。
通过优化存储结构减少内存占用的方法
- 精确计算所需空间:在初始化二进制位数组时,准确预估实际需要存储的布尔值数量,避免过度分配空间。例如,如果已知需要存储1000个布尔值,根据每个字节存储8位,应分配125个字节(1000 / 8),而不是随意分配较大空间。
- 按需扩展:如果数据量是动态增长的,不要一次性分配过大空间,而是根据实际增长情况逐步扩展。Redis提供了相关命令(如
SETBIT
),在设置新的位时会自动扩展字符串空间,这种按需扩展方式能有效避免预分配过多空间导致的内存浪费。 - 复用现有数据结构:如果应用场景中已经存在一些相关的字符串数据结构,且有剩余空间可以利用,可考虑复用这些空间来存储二进制位数组,从而减少整体内存占用。