code: func (l *SimpleLRUCache) Put(key Key, value Value) {
  	hash := string(key.Hash())
  	element, exists := l.elements[hash]
  	if exists {
  		l.cache.MoveToFront(element)
  		return
  	}
  
  	newCacheEntry := &cacheEntry{
  		key:   key,
  		value: value,
  	}
  
  	element = l.cache.PushFront(newCacheEntry)
  	l.elements[hash] = element
  	l.size++
  
  	memUsed, err := memory.MemUsed()
  	if err != nil {
  		l.DeleteAll()
  		return
  	}
  
  	for memUsed > uint64(float64(l.quota)*(1.0-l.guard)) || l.size > l.capacity {
  		lru := l.cache.Back()
  		if lru == nil {
  			break
  		}
  		l.cache.Remove(lru)
  		delete(l.elements, string(lru.Value.(*cacheEntry).key.Hash()))
  		l.size--
  		if memUsed > uint64(float64(l.quota)*(1.0-l.guard)) {
  			memUsed, err = memory.MemUsed()
  			if err != nil {
  				l.DeleteAll()
  				return
  			}
  		}
  	}
  }
docs: // Put puts the (key, value) pair into the LRU Cache.