更新时间:2023-11-06 GMT+08:00
分享

Redis连接池

在示例代码中使用了Redis连接池(BlockingConnectionPool),配置了最大连接数(max_connections)和连接池耗尽后获取连接的最大等待时间(timeout),代码片段如下:
    pool = BlockingConnectionPool(host=redis_host, port=redis_port,
                                  password=redis_password,
                                  max_connections=50, timeout=3,
                                  socket_timeout=2,
                                  socket_connect_timeout=2,
                                  retry=retry,
                                  retry_on_error=[BusyLoadingError,
                                                  ConnectionError,
                                                  TimeoutError],
                                  health_check_interval=60,
                                  decode_responses=True)

使用Redis连接池进一步复用已创建的连接,有效提升程序性能;同时,Redis提供了最大连接数配置确保连接资源的使用保持在一个可控范围内,并且能够确保线程安全。

最大连接数配置区间:在FunctionGraph函数配置Redis最大连接数建议在如下区间选取一个值:

  • 最大连接数下限 =(函数单实例并发度)*(函数单次执行访问Redis并发度)
  • 最大连接数上限 =(Redis实例连接数上限)/(函数最大实例数)

举例:某个访问Redis函数单实例并发度配置为5,每次执行函数访问Redis并发度为2,函数最大实例数默认400,访问的Redis实例连接数上限为30000,计算如下:

最大连接数下限 = 5*2 = 10

最大连接数上限 = 30000/400 = 75

按上述结果,建议最大连接数配置50即可。

连接池耗尽后获取连接的最大等待时间不要超过函数执行超时时间,避免因连接池耗尽后获取连接等待导致函数执行超时。如果需要快速失败将BlockingConnectionPool替换成ConnectionPool,并删除timeout配置即可。

相关文档