排查这个问题让我感触颇深,接触go已经快有半年时间了,但是很多知识点平时真的很难主动去接触,只有当问题来了,才会花时间在相关技术上探究;

感觉这不是一个正常的技术积累过程,被动学习的技术提升很慢!但是如何主动学习呢?说实话,自己目前业余时间真不多,忙于业务,忙于出成果,可是这些成果好像很难对技术有较大提升(可能是业务方向决定的),技术人感觉太难了!

是时候好好规划自己的时间和精力了!随便叨叨几句罢了。。。

背景

业务使用Go + redis缓存某些常用的热数据,使用redisgo包提供的连接池,本身这个业务数据量不大,qps不高,大概100出头,业务场景也比较简单,常用的mget

这个简单的缓存模型,不定期报错 container/pool exhausted

排查

结论

应该根据自己的业务量级,合理设置连接池的WaitTimeout,保证在高峰期并发高的时候,出现拿不到连接池的报错


写在后面:

这个问题好简单,但是自己平时没有注意,更没有深究那些配置项的作用,遇到先是抄别人的配置过来用,抱着侥幸的心理: “总不会差太多”,这样不好。其实通用组件的配置项都差不多,之前主要使用python,像sqlalchemy的连接池,redis-py的连接池,waitTimeout都是通用的概念,理解起来应该没有成本才对

  1. 多问为什么?
  2. 要学会和自己已经掌握的知识做关联,不要以为以前是python,现在是go,就大不一样;其实很多都是想通的,尤其是在第三方组件的使用上