Есть ли возможность получить необработанный поток ответов 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