code: func (c *lruSessionCache) Put(sessionKey string, cs *ClientSessionState) {
  	c.Lock()
  	defer c.Unlock()
  
  	if elem, ok := c.m[sessionKey]; ok {
  		entry := elem.Value.(*lruSessionCacheEntry)
  		entry.state = cs
  		c.q.MoveToFront(elem)
  		return
  	}
  
  	if c.q.Len() < c.capacity {
  		entry := &lruSessionCacheEntry{sessionKey, cs}
  		c.m[sessionKey] = c.q.PushFront(entry)
  		return
  	}
  
  	elem := c.q.Back()
  	entry := elem.Value.(*lruSessionCacheEntry)
  	delete(c.m, entry.sessionKey)
  	entry.sessionKey = sessionKey
  	entry.state = cs
  	c.q.MoveToFront(elem)
  	c.m[sessionKey] = elem
  }
docs: // Put adds the provided (sessionKey, cs) pair to the cache.