package main import ( "context" "fmt" "github.com/redis/go-redis/v9" ) // Task: // - Create a new team: Grumblebum // - Move Sykios, Nidios, and Belaeos to the new team // - Move Tiaitia to team Knucklewimp // - Remove team Dorkfoot func transaction(client *redis.Client) error { ctx := context.Background() _, err := client.TxPipelined(ctx, func(pipe redis.Pipeliner) error { // Move Sykios to team Grumblebum err := pipe.HSet(ctx, "player:1", "team", "Grumblebum").Err() if err != nil { return err } // Move Nidios to team Grumblebum err = pipe.HSet(ctx, "player:2", "team", "Grumblebum").Err() if err != nil { return err } // Move Belaeos to team Grumblebum err = pipe.HSet(ctx, "player:4", "team", "Grumblebum").Err() if err != nil { return err } // Move Tiaitia to team Knucklewimp err = pipe.HSet(ctx, "player:3", "team", "Knucklewimp").Err() if err != nil { return err } // Team update: remove Belaeos from team Knucklewimp err = pipe.SRem(ctx, "team:Knucklewimp", "Belaeos").Err() if err != nil { return err } // Team update: add Tiaitia to team Knucklewimp err = pipe.SAdd(ctx, "team:Knucklewimp", "Tiaitia").Err() if err != nil { return err } // Add team Grumblebum err = pipe.SAdd(ctx, "team:Grumblebum", "Sykios", "Nidios", "Belaeos").Err() if err != nil { return err } // Remove team Dorkfoot. A set is removed by removing all elements. err = pipe.SRem(ctx, "team:Dorkfoot", "Sykios", "Nidios", "Tiaitia").Err() if err != nil { return err } return nil }) if err != nil { return fmt.Errorf("TxPipelined failed: %w", err) } fmt.Printf("Sykios's new team: %s\n", client.HGet(ctx, "player:1", "team").Val()) fmt.Printf("Belaeos's new team: %s\n", client.HGet(ctx, "player:4", "team").Val()) fmt.Printf("Tiaitia's new team: %s\n", client.HGet(ctx, "player:3", "team").Val()) fmt.Printf("Team Grumblebum: %s\n", client.SMembers(ctx, "team:Grumblebum").Val()) fmt.Printf("Team Knucklewimp: %s\n", client.SMembers(ctx, "team:Knucklewimp").Val()) return nil }