我使用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
返回的结果