node.js - 使用 Redis 的 NodeJs 缓存

标签 node.js caching redis

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

相关文章:

node.js - 如何使用 Nodejs 处理具有 ms-rest-azure 的功能应用程序中的异常

hibernate - 外部缓存(例如ehcache/redis)在哪里适合w.r.t hibernate 级别1/级别2缓存?

java - 如何实现ehcache自填充缓存作为hibernate二级缓存

redis - Spring Data Redis 删除条目(哈希),但留下索引

python - 从 Python-RQ/Redis 中删除队列

redis - 我如何在redis中搜索字符串?

node.js - Express 4 中未定义 POST 正文

node.js - Upstart 和 node.js 应用程序 "stop: Unknown instance:"

node.js - 有条件地指向 package.json 中的主要字段

caching - 哪些 Sitecore 缓存受 Caching.ScavengeInterval 的影响,以及如何影响?