code: func createCacheKey(ei *dosa.EntityInfo, values map[string]dosa.FieldValue) interface{} {
  	var keys []string
  	for pk := range ei.Def.KeySet() {
  		if _, ok := values[pk]; ok {
  			keys = append(keys, pk)
  		}
  	}
  
  	// sort the keys so that we encode in a deterministic order
  	sort.Strings(keys)
  	var orderedKeys []map[string]dosa.FieldValue
  	for _, k := range keys {
  		orderedKeys = append(orderedKeys, map[string]dosa.FieldValue{k: values[k]})
  	}
  
  	return orderedKeys
  }
docs: // used for single entry reads/writes