Javascript 即使节点进程死亡,也要使缓存保持
我的后端Nodejs必须对外部服务进行一些API GET请求调用,以检索数据并用作网页。正在缓存这些API调用。 因为我使用的是Heroku,所以每次应用程序进入休眠状态时,这些数据都会被删除。是否存在任何持续存在的缓存库?目前我正在使用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
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我终于成功了!这正是我想要的