Kos*_*ika 1 javascript caching amazon-web-services node.js aws-lambda
我正在尝试临时缓存 AWS lambda 函数执行的一些数据,以省略该 lambda 现在每次执行的 HTTP 请求并优化其速度。
在“查看者请求”中,我有以下逻辑(示例是伪代码)-
exports.handler = async (event) => {
// check /tmp folder for data
const cachedData = await getDataFromCache();
if (cachedData) {
return cachedData;
}
const data = await getDataFromApi();
// save data for 2 mins in /tmp for re-use in next executions
await saveDataInCache(data);
return data;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我尝试将数据保存在/tmp
文件夹中几分钟,以便在下次执行中重复使用它并减少 API 请求的数量。
在“查看者请求”lambda 执行期间,当我将数据缓存在/tmp
文件夹内时,我立即看到日志中提供了数据 -
async function saveDataInCache(data = {}) {
// save data in tmp folder
try {
await fs.outputJson('/tmp/cache.json', {
data,
updatedAt: Date.now()
});
} catch (err) {
console.log(`page data save cache error ${err}`);
}
// check that data is immediately available
let fileData = {};
try {
fileData = await fs.readJson('/tmp/cache.json');
} catch (err) {
console.log(`page data read cache error ${err}`);
}
console.log(`check immediate value ${JSON.stringify(fileData)}`);
}
Run Code Online (Sandbox Code Playgroud)
然而,每次“查看器请求”在保存之前尝试读取数据时,它总是返回错误 - ENOENT: no such file or directory, open '/tmp/cache.json'
-
async function getDataFromCache() {
let fileData = {};
try {
fileData = await fs.readJson('/tmp/cache.json');
} catch (err) {
console.log(`page data read cache error ${err}`);
}
if (isEmpty(fileData)) {
return undefined;
}
const { data = {}, updatedAt = 0 } = fileData;
const maxCacheTime = updatedAt + DATA_TTL;
const currentTime = Date.now();
const isCacheExpired = currentTime > maxCacheTime;
if (!isCacheExpired) {
return data;
}
return undefined;
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着/tmp
文件夹内容在执行之间不共享?谢谢!
该/tmp
目录对于每个 Lambda 实例/执行上下文都是私有的,不会在所有 Lambda 实例之间共享。这意味着如果您的请求由不同的执行上下文处理,则数据将不会出现在那里。
不幸的是,您无法真正控制这些执行上下文的创建和删除方式,这是 Lambda 在后台为您处理的事情。
归档时间: |
|
查看次数: |
4662 次 |
最近记录: |