Есть ли возможность получить необработанный поток ответов RESP

Я использую 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

Я использую Writer в go-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()

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

}

Похоже, писатель не умеет разбирать Nested Result Arrayкак результат, возвращаемый COMMAND

0 ответов

Другие вопросы по тегам