需求是:根据目标积分从redis有序集合里取出一定数量低于给定积分的数据,假如给定积分是1000分,每次递减100分,那么就先取1000-900之间的数据。假如要求取20条,如果第一次没取够,则再减100,即第二次就取1000-800之间的,以此类推,直到取够20条或积分减到0则停止取。 我现在实现的代码如下,但是代码好像有问题,因为更新该代码后服务器的CPU一直高居不下。目前还在测试是不是该段代码导致的。 大家帮忙看看,代码是不是有问题,或者这样的逻辑应该怎么写
var getEnemy = function (score, key, temp_min) {
var max = score,
min = score - 100;
if (!isEmpty(temp_min)) min = temp_min;
if (min < 0) min = 0;
return cache.zrevrangebyscore(key, max, min)
.then(function (val) {
//未取够20条且还未到最低分数,扩大范围继续取
if(val.length<20&&min>0){
min-=100;
return getEnemy(score, key, min);
} else return val;
});
};
var isEmpty = function (obj) {
return (obj == null || typeof obj == "undefined" || obj.length == 0)
};