docs: def _get(self, name, interval, config, timestamp, **kws):
      '''
      Fetch a single interval from redis.
      '''
      i_bucket, r_bucket, i_key, r_key = self._calc_keys(config, name, timestamp)
      fetch = kws.get('fetch') or self._type_get
      process_row = kws.get('process_row') or self._process_row
  
      rval = OrderedDict()
      if config['coarse']:
        data = process_row( fetch(self._client, i_key) )
        rval[ config['i_calc'].from_bucket(i_bucket) ] = data
      else:
        # First fetch all of the resolution buckets for this set.
        resolution_buckets = sorted(map(int,self._client.smembers(i_key)))
  
        # Create a pipe and go fetch all the data for each.
        # TODO: turn off transactions here?
        pipe = self._client.pipeline(transaction=False)
        for bucket in resolution_buckets:
          r_key = '%s:%s'%(i_key, bucket)   # TODO: make this the "resolution_bucket" closure?
          fetch(pipe, r_key)
        res = pipe.execute()
  
        for idx,data in enumerate(res):
          data = process_row(data)
          rval[ config['r_calc'].from_bucket(resolution_buckets[idx]) ] = data
  
      return rval