如何连接到Redis在我的云函数之一?

pkbketx9  于 9个月前  发布在  Redis
关注(0)|答案(1)|浏览(104)

我有几个cloud function与下面的文件结构

root
 |_ functions
        |___src
             |___services
             |       |___function1.ts
             |       |___function2.ts
             |       |___function3.ts
             |
             |___index.tx

在我的索引中,我导入了所有的函数,然后将其导出为云函数

//index.ts

const function1 = require(./services/function1)
const function2 = require(./services/function2)
const function3 = require(./services/function3)

exports.function1 = function1.function1
exports.function2 = function2.function2
exports.function3 = function3.function3

然后,只有在我的函数1中我才想使用redis,所以我在我的函数1中包含了redis,这是我的redis.ts

import * as redis from "redis";

const REDISHOST = process.env.REDISHOST || 'localhost';
const REDISPORT = Number(process.env.REDISPORT || 6379);

const redisClient = redis.createClient({
  socket: {
    host: REDISHOST,
    port: REDISPORT,
  },
});
redisClient.on('error', err => console.error('ERR:REDIS:', err));
redisClient.connect();

export default redisClient;

我在我的function1中导入它如下:

import redisClient from "../common/redis"

exports.function1 = onRequest(logic)

我可以用我的函数1成功连接到redis。但问题是,当我部署function2和function3时,即使我没有将redis客户端导入到我的function2和function3中,它也在尝试连接到redis。
我做错什么了?

emeijp43

emeijp431#

首先要意识到的是,您的index.ts对于您从中导出的每个函数都要执行 * 完整 *。这意味着每个函数都将作为其执行的一部分,在新服务器示例的冷启动时:

  1. require ./services/function1
    1.导入redis.ts
    1.创建redisClient全局示例
    你应该做的不是将redisClient定义为一个全局变量,它总是在模块加载时被创建。将创建延迟到实际使用客户端的时候,如果需要,可以将其缓存在全局中,以便在同一服务器示例上的后续函数调用中可用。

相关问题