learning_go/testing/go-code-samples/get-started-with-redis/main.go
2025-12-20 17:00:05 +03:00

104 lines
2.3 KiB
Go

package main
import (
"fmt"
"log"
"os"
)
const (
dbconn = "localhost:6379"
db = 0
)
func usage() {
fmt.Println(`Usage: go run main.go <demo>
Where <demo> is one of:
- ping: run the ping command
- getset: get and set a string value
- expire: set an expiring key
- pipeline: run a batch of commands
- transaction: run a batch of commands that must all succeed
- pubsub: send a message to a channel and listen to the channel
- reset: restore the initial data set`)
}
func run() error {
// Create a new client from a connection string and a database number (0-15)
client := newClient(dbconn, 0)
if len(os.Args) < 2 {
usage()
return nil
}
switch os.Args[1] {
case "ping":
// Ping the redis server and fetch some database information.
fmt.Printf("\nPing: Test the connection\n")
ping(client)
case "getset":
// Get and set a string value.
fmt.Printf("\nGet/Set: Update the quest to title case\n")
err := getAndSet(client)
if err != nil {
return fmt.Errorf("getAndSet failed: %w", err)
}
case "expire":
// Set an expiring key and wait for it to expire
fmt.Printf("\nExpire: Add a player temporarily\n")
err := expiringKeys(client)
if err != nil {
return fmt.Errorf("expiringKeys failed: %w", err)
}
case "pipeline":
// Run a batch of commands.
fmt.Printf("\nPipeline: Update score and challenges_completed for team Snarkdumbthimble\n")
err := pipeline(client)
if err != nil {
return fmt.Errorf("pipeline failed: %w", err)
}
case "transaction":
// Run several commands that must all succeed.
// If any of them fails, the transaction will be canceled.
fmt.Printf("\nTransaction: Rearrange the teams\n")
err := transaction(client)
if err != nil {
return fmt.Errorf("transaction failed: %w", err)
}
case "pubsub":
// Send messages to a publish/receive channel.
// Listen to the channel and receive the messages.
fmt.Printf("\nPub/Sub: Publish challenges to subscribed teams\n")
err := pubsub(client)
if err != nil {
return fmt.Errorf("pubsub stopped: %w", err)
}
case "reset":
// Reset the database
fmt.Printf("\nReset the database\n")
err := resetdata(client)
if err != nil {
return fmt.Errorf("cannot reset database: %w", err)
}
default:
usage()
}
return nil
}
func main() {
err := run()
if err != nil {
log.Println(err)
os.Exit(1)
}
os.Exit(0)
}