首页 > 解决方案 > 如何在 nodejs 中设置 redis 缓存并正确使用?

问题描述

我尝试使用 mongodb 进行 node.js crud 操作,并将其存储在 redis 缓存中。第一次我尝试运行 get 方法从 db 获取数据,第二次我运行 get 方法。它从缓存中获取数据,但我试图删除表中的数据,然后再次运行 get 方法,它没有显示数据。它显示的是空数据。但是数据存储在redis缓存中。我该如何解决这个问题?

缓存.js

// var asyncRedis = require("async-redis")

// var myCache = asyncRedis.createClient()
var redis = require('redis');

const client = redis.createClient()

client.on('connect', function () {
    console.log('Redis client connected');
});

client.on('error', function (err) {
    console.log('Something went wrong ' + err);
});



var value;
var todayEnd = new Date().setHours(23, 59, 59, 999);







function  Get_Value()
{
    client.get('products', function(err,results) {
        value = JSON.parse(results);

    })
    return value
}

function Set_Value(products)
{
    client.set('products', JSON.stringify(products))
    client.expireat('products', parseInt(todayEnd/1000));


}

exports.get_value = Get_Value;

exports.set_value = Set_Value;

路线.py

data = cache.get_value()
      console.log(data)
      if (data) {
        console.log("GET")
        res.send(data)
      }
      else {
        console.log("SET")
        const r = await db.collection('Ecommerce').find().toArray();
        res.send(r)
        data = cache.set_value(r)
      }

标签: node.jsnode-redisnodejs-server

解决方案


哈里,

Get_Value对我来说有点奇怪。Redis get 将异步执行。因此,当您将return value语句放在回调之外时,它会立即返回,value仍然未定义。

解决这个问题的最简单方法是在 redis返回Get_Value时调用回调以继续。GET

function  Get_Value(callback) {
    client.get('products', function(err,results) {
        let value = JSON.parse(results);
>>      callback(value);
    });
}

你会这样使用它:

Get_Value(function(value) {
    console.log("products: " + value);
}

另一种选择是使用 Node Redis 的 Promise API(请参阅此处的文档:https ://github.com/NodeRedis/node_redis )

这有帮助吗?


推荐阅读