连接关闭时aws lambda崩溃

cgvd09ve  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(391)

我在lambda函数中使用golang连接到redis。当我第一次调用lambda时,会创建一个新的连接池,并且进一步调用lambda似乎会使用该池来获取连接。但是,当我添加con.close()行时,对lambda的第二个调用崩溃,第三个调用将重新创建池。如果我不关闭连接有什么风险吗?或者我可以用其他方法关闭连接吗?
我在cloud watch日志中得到的错误是pool.get()行上的“运行时错误,无效内存地址或nil指针”,看起来pool变量是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()

}
wmomyfyw

wmomyfyw1#

加一个怎么样 defer con.close() 在句柄函数中?因为在handle函数被调用之后,它将关闭con。

mqxuamgl

mqxuamgl2#

看起来你一打开连接就要关闭连接了,所以是的,lambda会自杀。
您可以使用某种循环保持连接的活动状态,处理消息,然后退出循环以关闭连接。反过来又会杀死羔羊。
你可以设置你的lambda是长寿命的,这只会不断招致成本。
一旦你的handle方法完成,lambdas就会自杀。

相关问题