sdk 实现连接池的的三种形式

  1. 连接池和连接分离的 API:有一个 XXXPool 类负责连接池实现,先从其获得连接XXXConnection,然后用获得的连接进行服务端请求,完成后使用者需要归还连接。通常,XXXPool 是线程安全的,可以并发获取和归还连接,而 XXXConnection 是非线程安全的。
    1. 那么连接池本身一般是线程安全的,可以复用。每次使用需要从连接池获取连接,使用后归还,归还的工作由使用者负责。
    2. 比如 jedisPool
  2. 内部带有连接池的 API:对外提供一个 XXXClient 类,通过这个类可以直接进行服务端请求;这个类内部维护了连接池,SDK 使用者无需考虑连接的获取和归还问题。一般而言,XXXClient 是线程安全的。
    1. SDK 会负责连接的获取和归还,使用的时候直接复用客户端。
  3. 非连接池的 API:一般命名为 XXXConnection,以区分其是基于连接池还是单连接的,而不建议命名为 XXXClient 或直接是 XXX。直接连接方式的 API 基于单一连接,每次使用都需要创建和断开连接,性能一般,且通常不是线程安全的。
    1. 通常不是线程安全的,而且短连接的方式性能不会很高,使用的时候需要考虑是否自己封装一个连接池。

注意

  1. 确保连接池是复用的
  2. 尽可能在程序退出之前显式关闭连接池释放资源
  3. 最大连接数需要自行测试
    1. 太少,容易造成等待超时
    2. 太多,造成目标的对应连接池不够用
  4. todo, 线程池的连接超时和等待超时如何设置