GO 语言操作 Redis

GO 语言操作 Redis

1 安装 redis 工具包

go get github.com/redis/go-redis/v9

go-redis 工具包官网

https://redis.uptrace.dev/zh/

配置说明 :

https://redis.uptrace.dev/zh/guide/go-redis-option.html#redis-client

重要说明

go-redis 工具包会根据携程来调用连接池内的连接,我们在全局初始化一次 rdb 即可项目的各处使用连接池。

2 测试代码

package main

import (
	"context"
	"fmt"
	"strconv"
	"sync"
	"time"

	"github.com/redis/go-redis/v9"
)

func main() {
	var wg sync.WaitGroup
	ctx := context.Background()
	// 初始化 redis 客户端
	rdb := redis.NewClient(&redis.Options{
		Addr:     "192.168.1.102:6379",
		Password: "", // 密码
		DB:       0,  // 使用的库
	})
gotoTip:
	// 开启多个进程
	for i := 1; i <= 15000; i++ {
		wg.Add(1)
		go func(step int) {
			defer func() {
				wg.Done()
			}()
			// 设置数据
			err := rdb.Set(
				ctx,
				"name"+strconv.Itoa(step),
				"test"+strconv.Itoa(step),
				time.Second*30,
			).Err()
			if err != nil {
				fmt.Printf("err: %v\n", err)
			} else {
				// 获取数据
				name, err := rdb.Get(ctx, "name"+strconv.Itoa(step)).Result()
				if err == nil {
					print(name)
				} else {
					fmt.Printf("err: %v\n", err)
				}
			}
		}(i)
	}
	wg.Wait()
	println("运行完毕")
	time.Sleep(time.Second * 3)
	// 循环执行
	goto gotoTip
	time.Sleep(time.Hour)
	// rdb.Close()
}

关于 Close

在上面的代码中我们初始化了 redis 客户端并连接、操作了 redis,操作过程会新建 redis 连接,我们需要主动关闭连接吗?

由于 rdb 是全局初始化的,在执行命令过程中会形成连接池,go-redis 工具包会自动维护连接池,我们可以不必收到关闭。