0

我使用go-redis为不支持直接访问 redis 集群的服务开发了一个 redis 集群代理。

import (
    "context"
    "github.com/go-redis/redis/v8"
)

var ctx = context.Background()

func ExampleClient() {
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    res, err := rdb.Do(ctx, "set", "key", "value").Result()
}

执行 res 后,err := rdb.Do(ctx, "set", "key", "value").Result(), 有没有获取原始 RESP 响应的方法?喜欢$6\r\nfoobar\r\n

我在 go-redis 中使用 Writer 来解析结果如下:

import (
    "context"
    "github.com/go-redis/redis/v8"
)

var ctx = context.Background()

func ExampleClient() {
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    res, err := rdb.Do(ctx, "set", "key", "value").Result()

    buffer := new(bytes.Buffer)
    writer := proto.NewWriter(buffer)

    switch t := result.(type) {
    case []interface{}:
        writer.WriteArgs(result.([]interface{}))
    case interface{}:
        writer.WriteArgs([]interface{}{result})
    default:
        log.Debugf("result: %+v", t)
    }

    log.Debugf("resp buff: %s", buffer.String())

}

似乎作者无法解析COMMANDNested Result Array返回的结果

4

0 回答 0