【发布时间】:2019-07-23 15:09:52
【问题描述】:
我有使用 RDS 的 Lambda。我想改进它并使用 Lambda 连接缓存。据我所知,我找到了几篇文章,并在我身边实施了它。但现在,我不确定这是正确的方法。
我有 Lambda(运行节点 8),它有几个与 require 一起使用的文件。我将从 main 函数开始,直到到达 MySQL 初始化程序,这是确切的路径。一切都将超级简单,只显示运行 MySQL 的代码流:
主 Lambda:
const jobLoader = require('./Helpers/JobLoader');
exports.handler = async (event, context) => {
const emarsysPayload = event.Records[0];
let validationSchema;
const body = jobLoader.loadJob('JobName');
...
return;
...//
职位代码:
const MySQLQueryBuilder = require('../Helpers/MySqlQueryBuilder');
exports.runJob = async (params) => {
const data = await MySQLQueryBuilder.getBasicUserData(userId);
MySQLBuilder:
const mySqlConnector = require('../Storage/MySqlConnector');
class MySqlQueryBuilder {
async getBasicUserData (id) {
let query = `
SELECT * from sometable WHERE id= ${id}
`;
return mySqlConnector.runQuery(query);
}
}
最后是连接器本身:
const mySqlConnector = require('promise-mysql');
const pool = mySqlConnector.createPool({
host: process.env.MY_SQL_HOST,
user: process.env.MY_SQL_USER,
password: process.env.MY_SQL_PASSWORD,
database: process.env.MY_SQL_DATABASE,
port: 3306
});
exports.runQuery = async query => {
const con = await pool.getConnection();
const result = con.query(query);
con.release();
return result;
};
我知道测量性能会显示实际结果,但是今天是星期五,我要到下周晚些时候才能在 Lambda 上运行它......真的,知道这将是一个很棒的周末开始我的方向是正确的……或者不是。
感谢您的意见。
【问题讨论】:
-
我实际上没有得到你的问题。想知道如何用 Lambda 实现缓存?
-
是的。上面的代码是我在 Lambda 上创建缓存的尝试。
-
你的意思是在你的函数被执行之前你需要你的连接,对吧?当我第一次阅读缓存时,我考虑过缓存结果一段时间。
-
是的。我希望避免为每个查询创建连接,而是依赖 Lambda 容器缓存。
-
感谢您的出色回答,它确实解释了很多。但是,我想实现本文中提到的一些事情:spotinst.com/blog/2017/11/19/…
标签: mysql node.js aws-lambda