redis-cli 如何对在 HLL 或位图上执行 GET 时返回的字符串值进行编码?

假设我有一个使用以下命令设置的位图


setbit key 0 1

setbit key 1 1

setbit key 2 0

setbit key 3 1

setbit key 4 1

当我从 redis-cli 运行 get on this key 时,我得到以下结果:"\xd8"


但是当我使用go-redis API执行此操作时,我得到了不同的结果:@


为了获得上述结果,我使用了以下代码:


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 文档的任何地方找到它,cli 使用哪种编码来产生这样的结果。我也想在我的 go 程序中将结果转换为相同的格式。


有人能告诉我这是哪种编码吗?如何将从 Redis API 收到的结果转换为 CLI 获得的结果?


catspeake
浏览 91回答 1
1回答

青春有我

redis-cli 和 Go 程序在某些键上获得相同的 GET 结果。您观察到的不同之处在于结果值的格式是如何输出的。问题中的 Go 程序按原样写入数据。该函数对换行符、引号等和\x<hex number>其他不可打印的字节使用典型的反斜杠转义。使用 fmt 包“%q”动词以类似格式输出数据:fmt.Printf("%q\n", res)如果您需要完全相同的格式,则需要将内部 Redis 函数转换为 Go。
打开App,查看更多内容
随时随地看视频慕课网APP