Как redis-cli кодирует строковые значения, возвращаемые при выполнении GET для HLL или растровых изображений? - PullRequest
0 голосов
/ 02 сентября 2018

Предположим, у меня есть растровое изображение, которое я установил с помощью следующих команд

setbit key 0 1
setbit key 1 1
setbit key 2 0
setbit key 3 1
setbit key 4 1

Когда я запускаю этот ключ из redis-cli, я получаю следующий результат: "\xd8"

Но когда я делаю это с помощью go-redis API , я получаю другой результат: this @

Чтобы получить вышеуказанный результат, я использовал следующий код:

package main

import (
    "fmt"

    "github.com/go-redis/redis"
)

func main() {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "",
        DB:       0,
    })

    pong, _ := client.Ping().Result()
    fmt.Println(pong)

    client.SetBit("key", 0, 1)
    client.SetBit("key", 1, 1)
    client.SetBit("key", 2, 0)
    client.SetBit("key", 3, 1)
    client.SetBit("key", 4, 1)  

    res := client.Get("bmk").Val()
    fmt.Println(res)

}

Я не могу найти нигде в Redis Docs, какую кодировку использует cli для получения таких результатов. Я также хотел бы преобразовать результаты в тот же формат в моей программе go.

Может кто-нибудь сказать мне, что это за кодировка и как я могу преобразовать результат, полученный от Redis API, в результат, полученный CLI?

1 Ответ

0 голосов
/ 02 сентября 2018

Redis-cli и программа Go получают одинаковый результат для GET для некоторой клавиши. Разница, которую вы наблюдаете, заключается в том, как значение результата форматируется для вывода.

Программа Go в вопросе записывает данные как есть.

Код Redis-Cli для кодирования вывода здесь . Функция использует типичные обратные слэши для перевода строки, кавычек и т. Д. И \x<hex number> для других непечатаемых байтов.

Используйте глагол пакета "% q" пакета fmt для вывода данных в аналогичном формате:

fmt.Printf("%q\n", res)

Если вам нужен точно такой же формат, тогда требуется перевод внутренней функции Redis на Go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...