即使Node进程终止,也会使缓存持久化

问题描述 投票:0回答:1

我的后端Nodejs必须对外部服务进行一些API GET请求调用,以检索数据并充当网页。正在缓存这些API调用。由于我正在使用Heroku,因此每次应用程序进入休眠状态时都会删除此数据。是否有任何缓存库仍然存在?目前我正在使用lru-cacheaxios-extensions

const axios = require('axios');
const { cacheAdapterEnhancer } = require('axios-extensions');
const LRUCache = require("lru-cache")

const options = {
    defaultCache: new LRUCache({ maxAge: 60 * 60 * 1000, max: 100 })
}

const http = axios.create({
        headers: { 'Cache-Control': 'no-cache' },
        timeout: 60000,
        adapter: cacheAdapterEnhancer(axios.defaults.adapter)
    }
)

getData: async () => {
    try {
        const response = await http.get(url, config)
        const data = response.data
        return data
    } catch (error) {
        console.log(error)
    }
}
javascript node.js caching axios
1个回答
0
投票

正如@giankotarola在评论中所建议的,我需要使用缓存DB来解决问题。最后,我设法使用Redis使其工作!我的最终代码:

const axios = require('axios')
const redis = require('redis')

// create and connect redis client to local instance.
const client = redis.createClient()

// Print redis errors to the console
client.on('error', (err) => {
    console.log("Error " + err)
});

const http = axios.create({
    headers: { 'Cache-Control': 'no-cache' },
    timeout: 60000
}
)

let config = {
    headers: {
        Authorization: `Bearer ${API_KEY}`,
    }
}

let url = 'https://example.com'

module.exports={
    getData: async () => {
        try {
            // Try to get response from Redis store
            const response = await client.get(url)
            return responseJSON = JSON.parse(response)
        } catch (err) {
            try {
                const response = await http.get(url, config)
                const data = response.data

                // Save response in Redis store
                client.setex(url, 60 * 60 * 1000, JSON.stringify(data));
                return data
            } catch (error) {
                console.log(error)
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.