我是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);
});
});
}
你能告诉你如何前进吗?
答案 0 :(得分:0)
以下是上述要点发布的解决方案。 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);
});
使用异步/等待(假设cache.get和Subjects.find返回承诺)
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)
})