code: func (db *DB) HMset(key []byte, args ...FVPair) error {
  	t := db.hashBatch
  	t.Lock()
  	defer t.Unlock()
  
  	var err error
  	var ek []byte
  	var num int64
  	for i := 0; i < len(args); i++ {
  		if err := checkHashKFSize(key, args[i].Field); err != nil {
  			return err
  		} else if err := checkValueSize(args[i].Value); err != nil {
  			return err
  		}
  
  		ek = db.hEncodeHashKey(key, args[i].Field)
  
  		if v, err := db.bucket.Get(ek); err != nil {
  			return err
  		} else if v == nil {
  			num++
  		}
  
  		t.Put(ek, args[i].Value)
  	}
  
  	if _, err = db.hIncrSize(key, num); err != nil {
  		return err
  	}
  
  	//todo add binglog
  	err = t.Commit()
  	return err
  }
docs: // HMset sets multi field-values.