node.js - egg 后端 使用redis 进行多个异步方法 操作数据 多个异步方法 执行完后 再取数据
1.方法介绍:
(1). hset: redis.hset(‘队列名’,‘键名(域名)’,值(value)) 为 指定 队列 新增 指定 的 值
(2).hget: redis.hget(‘队列名’,‘键名(域名)’) 获取 指定 队列 内的 指定 键名(域名) 的值
eg:
- redis.hset(‘test’,‘key_word’,1);
//为 test 队列 键名为 key_word 的值设置为 1。 如果test 队列不存在 则会 创建 一个 test 队列 如果 key_word 键名不存在 则会 创建一个 键名为 key_word 值为 1 的数据 - redis.hget(‘test’,‘key_word’);
- // 获取 test 队列 内 键名为 key_word 的值 此处 获取的值为 1
2.使用场景:
//获取 100个人的 信息
async function main(){
/* 逻辑处理*/
/*
此处为 循环
此处 使用 2个 队列来 标示 是否 完成
redis.hset('name',i,false);
redis.hset('age',i,false);
*/
getName(array);//异步 执行
getAge(array);//异步 执行
}
async getName(array){
/*获取名字*/
/*
此处为 循环
获取 完之后 将对应的 队列 内的 值 改为 true 代表 该 部分 数据已经 处理完成
redis.hset('name',i,true);
*/
}
async getAge(array){
/*获取年龄*/
/*
此处为 循环
获取 完之后 将对应的 队列 内的 值 改为 true 代表 该 部分 数据已经 处理完成
redis.hset('age',i,true);
*/
}
//返回 数据给 前端 该方法 为 前端 轮询 请求 执行 (每隔多少s 执行一次)
async returnData(data){
let offset = data.offset || 0; // data 是前端传过来的 偏移量
//这里 需要 等 main 方法 getName getAge 方法 都执行 完了 拼接 成 一个 完整的 数据 再 返回 给 前端
//此处 使用 while 来 实现 递归
let return_data =[]; //记录 完整 信息的 位置 通过位置 从数据库 取对应的 数据
while(await redis.hget('name',offset) && await redis.hget('age',offset)) {
//将 二者 均为 true 的值 返回给前端 (完整信息)
return_data.push(offset);
offset++
}
//数据库 操作
}