基本使用

    DoDoVar的区别在于返回的结果类型不一样,DoVar返回的是gvar.Var类型,该类型对象可以执行非常方便的类型转换。

    使用Do/DoVar方法已经能够满足绝大部分的场景需要,如果需要更复杂的Redis操作,那么我们可以使用Conn方法从连接池中获取一个连接对象,随后使用该连接对象进行操作。但需要注意的是,该连接对象不再使用时,应当显示调用Close方法进行关闭(丢回连接池)。

    执行后,输出结果为:

    1. v

    Send可以执行批量指令,并通过Receive方法一一获取返回结果。

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/frame/g"
    5. "github.com/gogf/gf/util/gconv"
    6. )
    7. func main() {
    8. conn := g.Redis().Conn()
    9. defer conn.Close()
    10. conn.Send("SET", "foo", "bar")
    11. conn.Send("GET", "foo")
    12. conn.Flush()
    13. // reply from SET
    14. conn.Receive()
    15. // reply from GET
    16. v, _ := conn.Receive()
    17. fmt.Println(gconv.String(v))
    18. }
    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/util/gconv"
    5. )
    6. func main() {
    7. conn := g.Redis().Conn()
    8. defer conn.Close()
    9. if err != nil {
    10. panic(err)
    11. }
    12. for {
    13. reply, err := conn.Receive()
    14. if err != nil {
    15. panic(err)
    16. }
    17. fmt.Println(gconv.Strings(reply))
    18. }
    19. }

    执行后,程序将阻塞等待获取数据。

    另外打开一个终端通过redis-cli命令进入Redis Server,发布一条消息:

    1. $ redis-cli
    2. 127.0.0.1:6379> publish channel test
    3. (integer) 1
    4. 127.0.0.1:6379>

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

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/container/gvar"
    5. "github.com/gogf/gf/frame/g"
    6. )
    7. func main() {
    8. var (
    9. err error
    10. result *gvar.Var
    11. key = "user"
    12. data = g.Map{
    13. "id": 10000,
    14. "name": "john",
    15. }
    16. )
    17. if err != nil {
    18. panic(err)
    19. }
    20. result, err = g.Redis().DoVar("GET", key)
    21. if err != nil {
    22. panic(err)
    23. fmt.Println(result.Map())
    24. }
    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/container/gvar"
    5. "github.com/gogf/gf/frame/g"
    6. )
    7. func main() {
    8. type User struct {
    9. Id int
    10. Name string
    11. }
    12. var (
    13. err error
    14. result *gvar.Var
    15. key = "user"
    16. user = &User{
    17. Id: 10000,
    18. Name: "john",
    19. }
    20. )
    21. _, err = g.Redis().Do("SET", key, user)
    22. if err != nil {
    23. panic(err)
    24. }
    25. result, err = g.Redis().DoVar("GET", key)
    26. if err != nil {
    27. panic(err)
    28. }
    29. var user2 *User
    30. if err = result.Struct(&user2); err != nil {
    31. panic(err)
    32. }
    33. fmt.Println(user2.Id, user2.Name)
    34. }