您的位置:58脚本 > go 使用redis GoFrame NoSQL Redis-基本使用

go 使用redis GoFrame NoSQL Redis-基本使用

2023-03-17 23:32 GoFrame教程

go 使用redis GoFrame NoSQL Redis-基本使用

go 使用redis

Go 语言是一种强大的编程语言,它可以用来构建高性能的 Web 应用程序。Go 语言提供了一个强大的标准库,可以帮助开发者快速构建 Web 应用程序。此外,Go 还支持使用 Redis 来存储数据。Redis 是一个开源的内存数据库,它可以帮助开发者快速存储和获取数据。

使用 Go 连接 Redis 非常容易,首先需要安装 Go 的 Redis 客户端库:

go get github.com/go-redis/redis
然后就可以使用这个库来连接 Redis 服务器了。在连接之前,需要先获取服务器的地址、端口、密码等信息:
client := redis.NewClient(&redis.Options{
Addr:     "localhost:6379",
Password: "", // no password set
DB:       0,  // use default DB
})
然后就可以使用 client 变量来进行 Redis 的相关操作了。例如,我们可以使用 Set 方法来存储一个 key-value 键值对:
err := client.Set("key", "value", 0).Err()
也可以使用 Get 方法来获取 key 的 value 值:
val, err := client.Get("key").Result()

此外,Go 还有很多高级的 Redis 操作方法,例如 HSet、HGet、HMSet 等方法都是 Go 中常用的 Redis 操作方法。Go 还有很多高级特性,例如 Pub/Sub、Pipelining 等特性都是 Go 中常用的特性。因此,Go 能够很好地利用 Redis 的优势来快速存储和获取数据。

GoFrame NoSQL Redis-基本使用

Do方法

我们最常用的是​Do​方法,执行同步指令,通过向​Redis Server​发送对应的​Redis API​命令,来使用​Redis Server​的服务。​Do​方法最大的特点是内部自行从连接池中获取连接对象,使用完毕后自动丢回连接池中,开发者无需手动调用​Close​方法,方便使用。

基本使用

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		ctx = gctx.New()
	)
	v, _ := g.Redis().Do(ctx, "SET", "k", "v")
	fmt.Println(v.String())
}

HSET/HGETALL操作

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gvar"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		err    error
		result *gvar.Var
		key    = "user"
		ctx = gctx.New()
	)
	_, err = g.Redis().Do(ctx, "HSET", key, "id", 10000)
	if err != nil {
		panic(err)
	}
	_, err = g.Redis().Do(ctx,"HSET", key, "name", "john")
	if err != nil {
		panic(err)
	}
	result, err = g.Redis().Do(ctx,"HGETALL", key)
	if err != nil {
		panic(err)
	}
	fmt.Println(result.Map())

	// May Output:
	// map[id:10000 name:john]
}

HMSET/HMGET操作

我们可以通过​map​参数执行​HMSET​操作。

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/util/gutil"
)

func main() {
	var (
		ctx = gctx.New()
		key  = "user_100"
		data = g.Map{
			"name":  "gf",
			"sex":   0,
			"score": 100,
		}
	)
	_, err := g.Redis().Do(ctx, "HMSET", append(g.Slice{key}, gutil.MapToSlice(data)...)...)
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	v, err := g.Redis().Do(ctx, "HMGET", key, "name")
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	fmt.Println(v.Slice())

	// May Output:
	// [gf]
}

我们可以通过​struct​参数执行​HMSET​操作。

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/gogf/gf/v2/util/gutil"
)

func main() {
	type User struct {
		Name  string `json:"name"`
		Sex   int    `json:"sex"`
		Score int    `json:"score"`
	}
	var (
		ctx = gctx.New()
		key  = "user_100"
		data = &User{
			Name:  "gf",
			Sex:   0,
			Score: 100,
		}
	)
	_, err := g.Redis().Do(ctx,"HMSET", append(g.Slice{key}, gutil.StructToSlice(data)...)...)
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	v, err := g.Redis().Do(ctx,"HMGET", key, "name")
	if err != nil {
		g.Log().Fatal(ctx, err)
	}
	fmt.Println(v.Slice())

	// May Output:
	// [gf]
}

自动序列化/反序列化

当给定的参数为​map​, ​slice​, ​struct​时,​gredis​内部支持自动对其使用​json​序列化,并且读取数据时可使用​gvar.Var​的转换功能实现反序列化。

map存取

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gvar"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		ctx = gctx.New()
		err    error
		result *gvar.Var
		key    = "user"
		data   = g.Map{
			"id":   10000,
			"name": "john",
		}
	)
	_, err = g.Redis().Do(ctx, "SET", key, data)
	if err != nil {
		panic(err)
	}
	result, err = g.Redis().Do(ctx,"GET", key)
	if err != nil {
		panic(err)
	}
	fmt.Println(result.Map())
}

struct存取

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gvar"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	type User struct {
		Id   int
		Name string
	}

	var (
		ctx = gctx.New()
		err    error
		result *gvar.Var
		key    = "user"
		user   = g.Map{
			"id":   10000,
			"name": "john",
		}
	)

	_, err = g.Redis().Do(ctx, "SET", key, user)
	if err != nil {
		panic(err)
	}
	result, err = g.Redis().Do(ctx, "GET", key)
	if err != nil {
		panic(err)
	}

	var user2 *User
	if err = result.Struct(&user2); err != nil {
		panic(err)
	}
	fmt.Println(user2.Id, user2.Name)
}


阅读全文
以上是58脚本为你收集整理的go 使用redis GoFrame NoSQL Redis-基本使用全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS