Node.js 使用HSET将JSON数据循环到Redis中
目前,我正在将mongoose查询中已经分页的数据添加到redis中,这样我就可以根据键Node.js 使用HSET将JSON数据循环到Redis中,node.js,redis,Node.js,Redis,目前,我正在将mongoose查询中已经分页的数据添加到redis中,这样我就可以根据键'listings-page-'+currentPage来提取它。我正在尝试hget我刚刚循环到redis中的数据,但目前,当尝试使用该键返回所有结果时,它返回未定义的数据 我猜这是一个追加问题,但我还没有在相关命令中看到与为hset redis数据追加数据相关的命令。谢谢你的帮助 .then(documents => { for (let i = 0;
'listings-page-'+currentPage
来提取它。我正在尝试hget
我刚刚循环到redis中的数据,但目前,当尝试使用该键返回所有结果时,它返回未定义的数据
我猜这是一个追加问题,但我还没有在相关命令中看到与为hset redis数据追加数据相关的命令。谢谢你的帮助
.then(documents => {
for (let i = 0; i < documents.length; i++) {
let docs = JSON.stringify(documents[i]);
let listingId = documents[i]._id.toString();
client.hset('listings-page-' + currentPage, listingId, docs);
}
client.hget('listings-page-' + currentPage, (err, val) => console.log((val)));
。然后(文档=>{
for(设i=0;iconsole.log((val));
我认为这可能是因为异步循环行为
您是否尝试在集合上使用forEach迭代器编写该代码?它将如下所示:
documents.forEach(document => {
client.hset('listings-page-' + currentPage,
document._id.toString(),
JSON.stringify(document));});
还有其他一些第三个包来处理承诺(如bluebird),它允许您处理一些其他场景,如竞争条件、并行迭代等
如果还有什么我能帮忙的,请告诉我
我的示例(需要在localhost:6379上运行redis)
我也尝试了forEach迭代器的方法,但它也返回未定义的。文档中肯定有数据。我已经构建了一个示例来重现相同的场景。它运行良好!我发现我的示例和您的示例之间的不同之处在于client.hget需要两个参数(key,field),hgetall只需要一个(key)。您需要哪一个?谢谢您的示例。指出hgetall和hget参数很有帮助。我想我弄错了。我可以使用2个参数从缓存中获取所有内容,并且可以使用
文档[2]执行hget。\u id.toString()作为第二个参数。谢谢帮助和解释!你考虑过使用ReDISJSON模块吗?
const redis = require('redis');
const client = redis.createClient(6379, 'localhost' );
client.on('connect', function() {
console.log('Redis client connected');
Save();
});
const documents =
[{_id: '000'}, {_id: '654'}, {_id: '789'},
{_id: '111'}, {_id: '222'}, {_id: '333'}];
/**
*
*/
async function Save () {
console.log('saving');
const key = 'listings-page-1';
await documents.forEach((document) => {
client.hset(key,
document._id.toString(),
'lorem ipsum', (err, obj) => console.log(obj));
console.log(key);
});
console.log('saved');
client.hgetall(key, (err, val) => console.log((val)));
};