code: func (m *Memory) Put(ctx context.Context, i backend.Item) (*backend.Lease, error) {
  	if len(i.Key) == 0 {
  		return nil, trace.BadParameter("missing parameter key")
  	}
  	m.Lock()
  	defer m.Unlock()
  	m.removeExpired()
  	event := backend.Event{
  		Type: backend.OpPut,
  		Item: i,
  	}
  	m.processEvent(event)
  	if !m.EventsOff {
  		m.buf.Push(event)
  	}
  	return m.newLease(i), nil
  }
docs: // Put puts value into backend (creates if it does not
  // exists, updates it otherwise)