code: function cacheQuery () {
      // debug
      debug('id:get', this.idCacheKeys, this.ids)
      // attempt to get from cache
      return this.cache.redis.mgetAsync(this.idCacheKeys)
      // check result
      .then(cached => {
          // list of ids that where not cached
          this.uncachedIds = []
          // check result set for uncached ids
          for (var i=0; i < this.numIds; i++) {
              var cachedValue = undefined
              // decode result if not null
              if (cached[i] !== null) {
                  try {
                      // decode JSON
                      cachedValue = JSON.parse(cached[i])
                      // add cached flag
                      cachedValue._cached = true
                  }
                  catch (err) {
                      // ignore errors
                  }
              }
              // if there is cached value use otherwise add id to fetch list
              defined(cachedValue)
                  ? this.cached.push(cachedValue)
                  : this.uncachedIds.push(this.ids[i])
          }
          // debug
          debug('id:uncachedIds', this.uncachedIds)
          // if all records were cached the return result from cache
          return this.uncachedIds.length === 0
              ? this.cached
              : this.loadUncached()
      })
  }
docs: @function cacheQuery
  
  @returns {Promise}