关闭连接时aws lambda崩溃

问题描述 投票:-2回答:2

我在lambda函数中使用golang连接到Redis。当我第一次调用lambda时,将创建一个新的连接池,并进一步调用lambda似乎使用该池来获取连接。但是,当我添加con.close()行时,对lambda的第二次调用将崩溃,而第三次调用将重新创建池。如果我不关闭连接,会有任何风险吗?还是可以通过其他方式关闭连接?

我在云监视日志上得到的错误是行池上的“运行时错误,无效的内存地址或nil指针。Get()好像池变量为nil?

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

func init(){
   pool = newPool()
}



func Handle(ctx context.context, req events.APIGatewayWebsocketProxyRequest)(interface{},error){

  //make new redis connection

  con:= pool.get()

   con.close()

}
database go redis aws-lambda database-connection
2个回答
0
投票

如何在Handle函数中添加defer con.close()?因为在调用Handle函数后,它将关闭con。


-1
投票

似乎您在打开连接后就立即关闭了连接,因此是的Lambda会杀死自己。

您可以通过某种循环使连接保持活动状态,处理您的消息然后退出循环以关闭连接。然后,这又会再次杀死Lambda。

您可以将lambda设置为long-lived,这样只会增加费用。

一旦您的Handle方法完成,lambda就会杀死自己。

© www.soinside.com 2019 - 2024. All rights reserved.