面试题答案
一键面试1. 使用连接池
在高并发读写且频繁切换Redis数据库的场景下,使用连接池是非常必要的。连接池可以避免每次操作都创建和销毁Redis连接带来的性能开销。
2. 连接池参数调整与数据库切换适配
- 最大连接数(maxTotal):根据业务并发量来设定。如果并发量很高,适当提高这个值,但不能超过Redis服务器的承载能力。比如,通过性能测试发现业务在并发量达到1000时性能开始下降,那么可以将
maxTotal
设置为1200左右,预留一定的缓冲空间。 - 最大空闲连接数(maxIdle):考虑到频繁切换数据库,需要保证有足够的空闲连接可以快速切换使用。可以设置为接近
maxTotal
的值,例如maxTotal
为1200,maxIdle
可以设置为1000,确保大部分连接在不使用时处于空闲状态,随时准备为新的数据库切换服务。 - 最小空闲连接数(minIdle):设置一个合理的最小值,保证即使在低并发情况下,也有一定数量的空闲连接可用。例如设置为200,这样在业务并发量突然升高时,不至于因为没有空闲连接而需要重新创建连接,影响性能。
- 连接等待超时(maxWaitMillis):设置合理的等待时间,比如5000毫秒(5秒)。在高并发频繁切换数据库时,如果连接池暂时没有可用连接,等待这个时间后若还获取不到连接,则抛出异常,避免业务长时间等待。
3. 数据库切换管理
- 缓存数据库切换信息:在应用层缓存每个业务模块常用的Redis数据库索引等切换信息,减少每次切换时查询配置文件或远程配置中心的开销。
- 预切换策略:对于一些有规律的数据库切换场景,提前准备好连接。比如某个业务模块每小时会固定切换到特定的数据库,可以在切换时间点前几分钟,提前从连接池获取连接并切换到相应数据库,待实际使用时可以直接使用,提高响应速度。