【发布时间】:2020-06-20 22:43:37
【问题描述】:
我正在尝试将 Redis 与 lambda 函数一起使用。如果 lamdba 不保持状态,我如何使用连接池。总是让 lambda 与 redis 建立新连接可以吗?或者我可以使用我在下面粘贴的连接池示例吗?在我的 Handle func 中,我将执行 conn := pool.Get()。不知道我应该采取什么方法。任何帮助。
func Handle(ctx context.context, req events.APIGatewayWebsocketProxyRequest)(interface{},error){
//make new redis connection
}
或
func newPool(addr string) *redis.Pool {
return &redis.Pool{
MaxIdle: 3,
IdleTimeout: 240 * time.Second,
// Dial or DialContext must be set. When both are set, DialContext takes precedence over Dial.
Dial: func () (redis.Conn, error) { return redis.Dial("tcp", addr) },
}
}
var (
pool *redis.Pool
redisServer = flag.String("redisServer", ":6379", "")
)
func main() {
flag.Parse()
pool = newPool(*redisServer)
...
}
【问题讨论】:
-
使用 Redigo 的池没有任何缺点,如果该进程用于处理多个函数调用,这是一个胜利。
-
“如果 lamdba 不保持状态,我如何使用连接池”你不能。该池将仅用于与该 lambda 实例的连接,并且只会在该实例持续的时间内持续存在,您无法控制这两个实例。不过,我仍然建议在代码中使用连接池;它几乎没有缺点,但有很多潜在的好处。
-
@Adrian- 有什么意义?无论如何,不会每次调用 lambda 建立新连接,而不是使用恒定的连接池。如果 lambda 运行的次数超过了连接数限制会怎样?
标签: database go redis aws-lambda