刚接触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/