code: func (r *Cache) Delete(ns, key uint64, onDel func()) bool {
  	r.mu.RLock()
  	defer r.mu.RUnlock()
  	if r.closed {
  		return false
  	}
  
  	hash := murmur32(ns, key, 0xf00)
  	for {
  		h, b := r.getBucket(hash)
  		done, _, n := b.get(r, h, hash, ns, key, true)
  		if done {
  			if n != nil {
  				if onDel != nil {
  					n.mu.Lock()
  					n.onDel = append(n.onDel, onDel)
  					n.mu.Unlock()
  				}
  				if r.cacher != nil {
  					r.cacher.Ban(n)
  				}
  				n.unref()
  				return true
  			}
  
  			break
  		}
  	}
  
  	if onDel != nil {
  		onDel()
  	}
  
  	return false
  }
docs: // Delete removes and ban 'cache node' with the given namespace and key.
  // A banned 'cache node' will never inserted into the 'cache tree'. Ban
  // only attributed to the particular 'cache node', so when a 'cache node'
  // is recreated it will not be banned.
  //
  // If onDel is not nil, then it will be executed if such 'cache node'
  // doesn't exist or once the 'cache node' is released.
  //
  // Delete return true is such 'cache node' exist.