gpt4 book ai didi

node.js - 使用 Redis 的 NodeJs 缓存

转载 作者:可可西里 更新时间:2023-11-01 11:36:10 25 4
gpt4 key购买 nike

刚接触NodeJs和Redis,想实现Redis提出的缓存功能。

我正在尝试使用以下查询,但我不确定在经过大量谷歌搜索后如何继续。查询如下:

module.exports = function(app) {

app.get('/api/data', function(req, res) {
Subjects.find({}, {'_id': 0, 'school_state': 1, 'resource_type': 1, 'poverty_level': 1, 'date_posted': 1, 'total_donations': 1, 'funding_status': 1, 'grade_level': 1},
function(err, subjectDetails) {
if (err)
res.send(err);
res.json(subjectDetails);
});
});
}

你能告诉我如何前进吗?

最佳答案

这是上面发布的要点的解决方案。 API 请求将回调传递给 getSubjects。 getSubjects 在对数据进行数据库调用之前检查 redis 缓存。

var redis = require('redis')


var cache = redis.createClient()

var subjectQueryParams = {'_id': 0, 'school_state': 1, 'resource_type': 1, 'poverty_level': 1, 'date_posted': 1, 'total_donations': 1, 'funding_status': 1, 'grade_level': 1}

var getSubjects = function(done) {
cache.get('subjects', function(err, data){
if(err) return done(err)
if(data)
return done(null, JSON.parse(data))
Subjects.find({}, subjectQueryParams, function(err, results) {
if(err) return done(err)
if(results) {
cache.set('subjects', JSON.stringify(results))
}
done(null, results) // no results
})
})
}

app.get('/api/data', function(req, res) {
getSubjects(function(err, data) {
if (err) return res.send(err);
res.json(data);
});

使用 async/await(假设 cache.get 和 Subjects.find 返回一个 promises)

const redis = require('redis')
const cache = redis.createClient()

const subjectQueryParams = {'_id': 0, 'school_state': 1, 'resource_type': 1, 'poverty_level': 1, 'date_posted': 1, 'total_donations': 1, 'funding_status': 1, 'grade_level': 1}

async function getSubjects() {
const data = await cache.get('subjects')
if(data)
return JSON.parse(data)
const results = await Subjects.find({}, subjectQueryParams)
if(results) {
cache.set('subjects', JSON.stringify(results))
}
return results
})
}

app.get('/api/data', async function(req, res) {
const data = await getSubjects()
res.json(data)
})

关于node.js - 使用 Redis 的 NodeJs 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com