docs: function mget(keys, cb){
    if(!keys || keys.length<=0){
      if(cb) return cb(new Error('empty key'));
      else throw new Error('empty key');
    }
  
    var gkvs;//the return kvs
    if(cb){
      storeGetKeys.call(this, 0, keys, gkvs, cb);
    }
    else{
      var fiber = fibext();//resume before wait
      for(var j in this._stores){
        var store = this._stores[j];
  
        var rbw = false, kvs;
        store.mget(keys, function(){
          kvs = fiber.resume.apply(fiber, arguments);
          rbw = true;
        });
        rbw || (kvs = fiber.wait());
  
        keys = [];//remaining keys
        for(var k in kvs){
          if(undefined!==kvs[k]){
            gkvs || (gkvs = {});
            gkvs[k] = kvs[k];
          }
          else keys.push(k);
        }
        if(keys.length>0) continue;//not all found in this store, try next for remaining keys
        else break;
      }
      return gkvs;
    }
  }