code: func (c *Cache) Put(ctx context.Context, key, value interface{}, exp time.Duration) (prev interface{}, had bool) {
  	c.Mutate(ctx, key, func(cur *Item) *Item {
  		if cur != nil {
  			prev, had = cur.Value, true
  		}
  		return &Item{value, exp}
  	})
  	return
  }
docs: // Put adds a new value to the cache. The value in the cache will be replaced
  // regardless of whether an item with the same key already existed.
  //
  // If the supplied expiration is <=0, the item will not have a time-based
  // expiration associated with it, although it still may be pruned if it is
  // not used.
  //
  // Put uses the cache read/write lock.
  //
  // Returns whether not a value already existed for the key.
  //
  // The new item will be considered most recently used.