code: func (c *RawKVClient) Put(key, value []byte) error {
  	start := time.Now()
  	defer func() { tikvRawkvCmdHistogramWithBatchPut.Observe(time.Since(start).Seconds()) }()
  	tikvRawkvSizeHistogramWithKey.Observe(float64(len(key)))
  	tikvRawkvSizeHistogramWithValue.Observe(float64(len(value)))
  
  	if len(value) == 0 {
  		return errors.New("empty value is not supported")
  	}
  
  	req := &tikvrpc.Request{
  		Type: tikvrpc.CmdRawPut,
  		RawPut: &kvrpcpb.RawPutRequest{
  			Key:   key,
  			Value: value,
  		},
  	}
  	resp, _, err := c.sendReq(key, req, false)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	cmdResp := resp.RawPut
  	if cmdResp == nil {
  		return errors.Trace(ErrBodyMissing)
  	}
  	if cmdResp.GetError() != "" {
  		return errors.New(cmdResp.GetError())
  	}
  	return nil
  }
docs: // Put stores a key-value pair to TiKV.