code: func (c *Cache) DeleteRange(keys [][]byte, min, max int64) {
  	c.init()
  
  	c.mu.Lock()
  	defer c.mu.Unlock()
  
  	var total uint64
  	for _, k := range keys {
  		// Make sure key exist in the cache, skip if it does not
  		e := c.store.entry(k)
  		if e == nil {
  			continue
  		}
  
  		total += uint64(e.size())
  		// Everything is being deleted.
  		if min == math.MinInt64 && max == math.MaxInt64 {
  			total += uint64(len(k)) // all entries and the key.
  			c.store.remove(k)
  			continue
  		}
  
  		// Filter what to delete by time range.
  		e.filter(min, max)
  		if e.count() == 0 {
  			// Nothing left in cache for that key
  			total += uint64(len(k)) // all entries and the key.
  			c.store.remove(k)
  			continue
  		}
  
  		// Just update what is being deleted by the size of the filtered entries.
  		total -= uint64(e.size())
  	}
  	c.tracker.DecCacheSize(total) // Decrease the live cache size.
  	c.tracker.SetMemBytes(uint64(c.Size()))
  }
docs: // DeleteRange removes the values for all keys containing points
  // with timestamps between between min and max from the cache.
  //
  // TODO(edd): Lock usage could possibly be optimised if necessary.