code: func GetAndCacheServiceProfile(db sqlx.Queryer, p *redis.Pool, id uuid.UUID) (ServiceProfile, error) {
  	sp, err := GetServiceProfileCache(p, id)
  	if err == nil {
  		return sp, nil
  	}
  
  	if err != ErrDoesNotExist {
  		log.WithFields(log.Fields{
  			"id": id,
  		}).WithError(err).Error("get service-profile cache error")
  		// we don't return as we can fall-back onto db retrieval
  	}
  
  	sp, err = GetServiceProfile(db, id)
  	if err != nil {
  		return ServiceProfile{}, errors.Wrap(err, "get service-profile-error")
  	}
  
  	err = CreateServiceProfileCache(p, sp)
  	if err != nil {
  		log.WithFields(log.Fields{
  			"id": id,
  		}).WithError(err).Error("create service-profile cache error")
  	}
  
  	return sp, nil
  }
docs: // GetAndCacheServiceProfile returns the service-profile from cache in case
  // available, else it will be retrieved from the database and then stored
  // in cache.