Redis为何使用数字作为数据库名且数量上限为16?
Redis采用数字作为数据库标识、默认16个数据库上限的设计原因
- 先说数字标识的设计逻辑:这是Redis早期走实用主义路线的选择,和极致性能优化关系不大。最早上线多数据库功能的时候,Redis的定位就是单实例部署的轻量缓存组件,根本没打算做复杂的多租户、命名空间级的重型隔离能力。用整数做数据库ID,切换、查找数据库的时候直接拿整数当数组下标取对应实例的指针就行,省掉了字符串哈希、键查找的额外逻辑,代码写起来简单,运行时也几乎没额外开销,完全是够用就好的设计思路。
- 再解释16个数据库上限的问题:这个16根本不是硬编码的性能阈值,只是出厂默认配置值。你直接改
redis.conf里的databases配置项,设成32、64甚至更大都能正常运行,不存在设超过16就性能暴跌的说法。
早期选16当默认值就是个拍板的保守折中值:一来当时Redis单实例的内存普遍不大,16个隔离空间足够覆盖绝大多数开发者“把缓存、登录会话、延时队列不同类型数据分开存”的日常需求;二来早期做RDB、AOF持久化时需要遍历所有数据库落盘,默认值设太小不够用,设太大的话哪怕是空数据库也会产生无意义的遍历开销,16就是当时开发者觉得“够用又不浪费”的数,没有经过什么精密的性能测算。 - 最后澄清设计初衷的误区:这个设计从来不是为了刻意限制数据库命名,本质是因为多数据库本身就不是Redis的核心功能——现在Redis官方本身都不推荐生产环境用多数据库做资源隔离,真要隔离业务直接部署多个独立Redis实例更稳妥,不会出现一个库的慢查询堵死所有库的问题,权限控制也更清晰。现在的Redis Cluster集群模式直接废弃了多数据库支持,只允许使用0号库,也能侧面说明这个功能就是早期面向单实例轻量场景的过渡设计,不是什么经过反复推演的核心架构决策。
内容的提问来源于stack exchange,提问作者Leroy Bakker
相关产品推荐
相关产品推荐

