Javascript 即使节点进程死亡,也要使缓存保持

Javascript 即使节点进程死亡,也要使缓存保持,javascript,node.js,caching,axios,Javascript,Node.js,Caching,Axios,我的后端Nodejs必须对外部服务进行一些API GET请求调用,以检索数据并用作网页。正在缓存这些API调用。 因为我使用的是Heroku,所以每次应用程序进入休眠状态时,这些数据都会被删除。是否存在任何持续存在的缓存库?目前我正在使用lru缓存和axios扩展 const axios = require('axios'); const { cacheAdapterEnhancer } = require('axios-extensions'); const LRUCache = requir

我的后端Nodejs必须对外部服务进行一些API GET请求调用,以检索数据并用作网页。正在缓存这些API调用。 因为我使用的是Heroku,所以每次应用程序进入休眠状态时,这些数据都会被删除。是否存在任何持续存在的缓存库?目前我正在使用
lru缓存
axios扩展

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)
    }
}

正如@giankotarola在评论中所建议的,我需要使用cachedb来解决这个问题。最后,我设法使它工作使用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)
            }
        }
    }
}

如果你正在内存中缓存,而你的应用程序崩溃或服务器宕机,你将丢失缓存,因此你需要一个缓存数据库,如memcached或redis。谢谢你的建议。听起来不错!我会检查它的Hanks@giankotarola我终于成功了!这正是我想要的