client.keys这种模糊查询的方式,在数据量很大的时候,可能造成内存方面的问题,就用了一个分页查询的方法。
//原来的查询是这样的
client.keys(‘visi_*’,function(err,replies) {
}
当数据量特别大的时候,可能造成占用很大的内存
修改后:
function scanSync(cursor,keys){
return new Promise((solve,reject) => {
client.scan(cursor,“MATCH”,keys,“COUNT”,keysNum, function(err,replies) {
if (err) {
return reject(err);
}
return solve(replies);
});
});
}
async function scan(keys,callback){
var cursor = 0;
do{
var res = await scanSync(cursor,keys);
//res的值,res[0]为cursor游标,res[1]为key值
var replies = res[1];//取key[]值,是数组
//通过key值查询
await funMget(replies);
cursor = res[0];
}while(cursor!=0);
}
client.scan这个方法有个参数curson,这个是游标每次查询后增长,查到最后的时候会归0,利用这个特性,实现分页查询。