Do方法

Do是通用的命令交互方法,执行同步指令,通过向Redis Server发送对应的Redis API命令,来使用Redis Server的服务。Do方法最大的特点是使用Redis命令与服务端交互,因此扩展很强,没有提供Redis操作方法的其他命令都可以通过Do方法来实现。使用示例:

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())
}

自动序列化/反序列化

当给定的参数为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)
}
Content Menu

  • No labels

1 Comment

  1. key := "zset_test"
    data := []string{"test4", "test3"}

    dataStr := strings.Join(data, " ")

    i, err := g.Redis().ZRem(context.Background(), key, dataStr)

    fmt.Println(i, err)

    上面这段代码并不能删除了0条,而zset_test中确实有test4, test3这两个元素。
    还尝试过:

    i, err := g.Redis().Do(context.Background(), "ZREM", key, g.Slice{"test4", "test3"})
    i, err := g.Redis().Do(context.Background(), "ZREM", key, data)

    i, err := g.Redis().ZRem(context.Background(), key, data)

    i, err := g.Redis().ZRem(context.Background(), key, nil, data)