code: func (r *Cache) Close() error {
  	r.mu.Lock()
  	if !r.closed {
  		r.closed = true
  
  		h := (*mNode)(r.mHead)
  		h.initBuckets()
  
  		for i := range h.buckets {
  			b := (*mBucket)(h.buckets[i])
  			for _, n := range b.node {
  				// Call releaser.
  				if n.value != nil {
  					if r, ok := n.value.(util.Releaser); ok {
  						r.Release()
  					}
  					n.value = nil
  				}
  
  				// Call OnDel.
  				for _, f := range n.onDel {
  					f()
  				}
  				n.onDel = nil
  			}
  		}
  	}
  	r.mu.Unlock()
  
  	// Avoid deadlock.
  	if r.cacher != nil {
  		if err := r.cacher.Close(); err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // Close closes the 'cache map' and forcefully releases all 'cache node'.