
# 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提供了最大连接数配置确保连接资源的使用保持在一个可控范围内，并且能够确保线程安全。
![](https://support.huaweicloud.com/bestpractice-functiongraph/public_sys-resources/note_3.0-zh-cn.png)
**最大连接数配置区间：**在FunctionGraph函数配置Redis最大连接数建议在如下区间选取一个值：
- **最大连接数下限** =（[函数单实例并发度](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0303.html)）\*（函数单次执行访问Redis并发度）
- **最大连接数上限** =（Redis实例连接数上限）/（函数最大实例数）
举例：某个访问Redis函数单实例并发度配置为5，每次执行函数访问Redis并发度为2，函数最大实例数默认400，访问的Redis实例连接数上限为30000，计算如下：
**最大连接数下限** = 5\*2 = 10
**最大连接数上限** = 30000/400 = 75
按上述结果，建议最大连接数配置50即可。
**连接池耗尽后获取连接的最大等待时间** **：** 不要超过[函数执行超时时间](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1828.html)，避免因连接池耗尽后获取连接等待导致函数执行超时。如果需要快速失败将BlockingConnectionPool替换成ConnectionPool，并删除timeout配置即可。
