面试题答案
一键面试- 扩容时机优化
- 基于负载因子动态调整:设置合理的负载因子,当负载因子达到一定阈值(如0.75 - 0.85)时,触发扩容。避免过早扩容浪费内存,也防止过晚扩容导致哈希冲突加剧影响性能。例如,当键值对数量与哈希表大小的比例接近设定的负载因子时,开始准备扩容。
- 利用系统空闲时段:监控系统的业务流量,选择系统负载较低的时间段进行扩容。比如对于电商系统,凌晨时段业务量相对较少,可以在这个时候进行Redis rehash操作,减少对正常业务的影响。
- 数据迁移方式优化
- 渐进式rehash:Redis采用的是渐进式rehash,不是一次性将所有数据从旧哈希表迁移到新哈希表,而是分多次逐步迁移。每次处理客户端请求时,顺带迁移少量数据,这样可以将数据迁移的压力分摊到多个请求处理过程中,避免一次性迁移大量数据导致系统卡顿。
- 多线程迁移:在多核CPU环境下,可以利用多线程技术并行迁移数据。为每个线程分配一定范围的数据进行迁移,加快整体迁移速度。不过要注意线程安全问题,如使用互斥锁等机制来保护共享资源。
- 预取数据:在迁移数据前,提前预取即将迁移的数据到缓存中,减少磁盘I/O操作(如果数据在磁盘上)。这样在真正迁移时,可以直接从缓存中获取数据,提高迁移效率。