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