From 04f642ff5e1b0db32a50a193a6e2dd388c3f34b0 Mon Sep 17 00:00:00 2001 From: andy-stark-redis <164213578+andy-stark-redis@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:45:38 +0100 Subject: [PATCH] Doc 4226 hash tces (#3106) * DOC-4226 hash examples for docs * DOC-4226 added hash scan examples * DOC-4226 fixed test output issues --------- Co-authored-by: Vladyslav Vildanov <117659936+vladvildanov@users.noreply.github.com> --- doctests/hash_tutorial_test.go | 281 +++++++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 doctests/hash_tutorial_test.go diff --git a/doctests/hash_tutorial_test.go b/doctests/hash_tutorial_test.go new file mode 100644 index 00000000..8b0b1ce9 --- /dev/null +++ b/doctests/hash_tutorial_test.go @@ -0,0 +1,281 @@ +// EXAMPLE: hash_tutorial +// HIDE_START +package example_commands_test + +import ( + "context" + "fmt" + + "github.com/redis/go-redis/v9" +) + +// HIDE_END + +func ExampleClient_set_get_all() { + ctx := context.Background() + + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password docs + DB: 0, // use default DB + }) + + // REMOVE_START + rdb.Del(ctx, "bike:1") + // REMOVE_END + + // STEP_START set_get_all + hashFields := []string{ + "model", "Deimos", + "brand", "Ergonom", + "type", "Enduro bikes", + "price", "4972", + } + + res1, err := rdb.HSet(ctx, "bike:1", hashFields).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res1) // >>> 4 + + res2, err := rdb.HGet(ctx, "bike:1", "model").Result() + + if err != nil { + panic(err) + } + + fmt.Println(res2) // >>> Deimos + + res3, err := rdb.HGet(ctx, "bike:1", "price").Result() + + if err != nil { + panic(err) + } + + fmt.Println(res3) // >>> 4972 + + cmdReturn := rdb.HGetAll(ctx, "bike:1") + res4, err := cmdReturn.Result() + + if err != nil { + panic(err) + } + + fmt.Println(res4) + // >>> map[brand:Ergonom model:Deimos price:4972 type:Enduro bikes] + + type BikeInfo struct { + Model string `redis:"model"` + Brand string `redis:"brand"` + Type string `redis:"type"` + Price int `redis:"price"` + } + + var res4a BikeInfo + + if err := cmdReturn.Scan(&res4a); err != nil { + panic(err) + } + + fmt.Printf("Model: %v, Brand: %v, Type: %v, Price: $%v\n", + res4a.Model, res4a.Brand, res4a.Type, res4a.Price) + // >>> Model: Deimos, Brand: Ergonom, Type: Enduro bikes, Price: $4972 + // STEP_END + + // Output: + // 4 + // Deimos + // 4972 + // map[brand:Ergonom model:Deimos price:4972 type:Enduro bikes] + // Model: Deimos, Brand: Ergonom, Type: Enduro bikes, Price: $4972 +} + +func ExampleClient_hmget() { + ctx := context.Background() + + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password docs + DB: 0, // use default DB + }) + + // REMOVE_START + rdb.Del(ctx, "bike:1") + // REMOVE_END + + hashFields := []string{ + "model", "Deimos", + "brand", "Ergonom", + "type", "Enduro bikes", + "price", "4972", + } + + _, err := rdb.HSet(ctx, "bike:1", hashFields).Result() + + if err != nil { + panic(err) + } + + // STEP_START hmget + cmdReturn := rdb.HMGet(ctx, "bike:1", "model", "price") + res5, err := cmdReturn.Result() + + if err != nil { + panic(err) + } + + fmt.Println(res5) // >>> [Deimos 4972] + + type BikeInfo struct { + Model string `redis:"model"` + Brand string `redis:"-"` + Type string `redis:"-"` + Price int `redis:"price"` + } + + var res5a BikeInfo + + if err := cmdReturn.Scan(&res5a); err != nil { + panic(err) + } + + fmt.Printf("Model: %v, Price: $%v\n", res5a.Model, res5a.Price) + // >>> Model: Deimos, Price: $4972 + // STEP_END + + // Output: + // [Deimos 4972] + // Model: Deimos, Price: $4972 +} + +func ExampleClient_hincrby() { + ctx := context.Background() + + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password docs + DB: 0, // use default DB + }) + + // REMOVE_START + rdb.Del(ctx, "bike:1") + // REMOVE_END + + hashFields := []string{ + "model", "Deimos", + "brand", "Ergonom", + "type", "Enduro bikes", + "price", "4972", + } + + _, err := rdb.HSet(ctx, "bike:1", hashFields).Result() + + if err != nil { + panic(err) + } + + // STEP_START hincrby + res6, err := rdb.HIncrBy(ctx, "bike:1", "price", 100).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res6) // >>> 5072 + + res7, err := rdb.HIncrBy(ctx, "bike:1", "price", -100).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res7) // >>> 4972 + // STEP_END + + // Output: + // 5072 + // 4972 +} + +func ExampleClient_incrby_get_mget() { + ctx := context.Background() + + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password docs + DB: 0, // use default DB + }) + + // REMOVE_START + rdb.Del(ctx, "bike:1:stats") + // REMOVE_END + + // STEP_START incrby_get_mget + res8, err := rdb.HIncrBy(ctx, "bike:1:stats", "rides", 1).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res8) // >>> 1 + + res9, err := rdb.HIncrBy(ctx, "bike:1:stats", "rides", 1).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res9) // >>> 2 + + res10, err := rdb.HIncrBy(ctx, "bike:1:stats", "rides", 1).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res10) // >>> 3 + + res11, err := rdb.HIncrBy(ctx, "bike:1:stats", "crashes", 1).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res11) // >>> 1 + + res12, err := rdb.HIncrBy(ctx, "bike:1:stats", "owners", 1).Result() + + if err != nil { + panic(err) + } + + fmt.Println(res12) // >>> 1 + + res13, err := rdb.HGet(ctx, "bike:1:stats", "rides").Result() + + if err != nil { + panic(err) + } + + fmt.Println(res13) // >>> 3 + + res14, err := rdb.HMGet(ctx, "bike:1:stats", "crashes", "owners").Result() + + if err != nil { + panic(err) + } + + fmt.Println(res14) // >>> [1 1] + // STEP_END + + // Output: + // 1 + // 2 + // 3 + // 1 + // 1 + // 3 + // [1 1] +}