node.js - 如何在 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)
}
解决方案
哈里,
你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 )
这有帮助吗?
推荐阅读
- python - 如何同时替换多个子字符串
- kubernetes - 在 Kubernetes 上实现区块链
- node.js - 托管节点 ftp 服务器的最简单方法
- ios - AFNetworking 上传数据过长
- docker - Nifi docker 镜像在本地运行,但在 Rancher pod 上找不到敏感的 prop key 错误
- c# - 调用外部函数而不实例化其父类
- raspberry-pi - 使用 VLC 将视频从 Raspberry 流式传输到 PC
- git - 将 master 带回特定的提交
- javascript - 有没有办法在文本区域内有不同颜色的文本?
- postgresql - 如何在 PostgreSQL 中创建特定日期?