单键映射百万条小数据的低延迟读取方案咨询:数据库选型、存储方式及读取策略优化
问题2:读取方案选择(单次 vs 分批)
要达成200ms以内的低延迟目标,直接选方案1:单次调用获取全部数据就好,原因很实在:
- 数据量完全可控:100万条×20字节=20MB,这个量级在现代网络里根本不算事儿——千兆网卡的理论传输速度是125MB/s,20MB仅需约160ms就能传完,加上Redis处理
HGETALL命令的时间(纯内存操作,也就几毫秒),总延迟妥妥能压在200ms以内。我之前在同机房环境测过类似场景,HGETALL的总耗时(命令处理+网络传输)大概在120-180ms之间,完全达标。 - 分批调用反而更慢:分批读取会叠加多次网络往返(RTT)的开销,哪怕每次RTT只有1ms,分10次调用就多了9ms的额外延迟;而且多次命令调用会增加Redis和应用客户端的处理开销,总延迟反而会超过单次调用。
- 所谓的"阻塞"问题无需担心:有人可能怕
HGETALL会阻塞Redis的单线程,但处理100万条Hash元素的时间极短(通常<5ms),根本不会对其他请求造成明显影响。如果你的业务对Redis并发要求极高到极致,才需要考虑用HSCAN游标分批读取,但这会把总延迟拉到几百毫秒以上,完全不符合你的目标,所以没必要。
最终结论
- 数据库:Redis
- 存储方式:将所有100万条条目存入单个Redis Hash中(记得调大Hash的压缩列表配置)
- 读取方案:单次调用
HGETALL命令获取全部数据
只要保证应用和Redis的网络距离足够近(同机房/同机器),这个方案绝对能实现你的200ms低延迟目标。
内容的提问来源于stack exchange,提问作者cyclops
相关产品推荐
相关产品推荐

