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

标签 go encoding redis

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

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

当我从 redis-cli 运行 get 这个键时,我得到以下结果:"\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 获得的结果吗?

最佳答案

redis-cli 和 Go 程序对某些键的 GET 得到相同的结果。您观察到的差异在于结果值的输出格式。

问题中的Go程序按原样写入数据。

编码输出的redis-cli代码为here 。该函数使用典型的反斜杠转义符来表示换行符、引号等和 \x<hex number>对于其他不可打印的字节。

使用fmt包“%q”动词以类似的格式输出数据:

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

如果您需要完全相同的格式,则需要将内部 Redis 函数翻译为 Go。

关于go - redis-cli 如何对在 HLL 或位图上执行 GET 时返回的字符串值进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52137651/

相关文章:

.net - 什么代码页将 'ç' 编码为 '?º' (0x3f 0xba)

C:字符串到毫秒时间戳

amazon-web-services - 如何在 docker 容器内使用主机的 IAM

go - 我可以通过 GO 中的方法扩展错误接口(interface)吗?

RStudio 0.97.551 在控制台中显示无法识别的字符

ios - 为什么 NSURL Connection Received Data 包含字节,但在转换为 NSString 时,字符串为 Null?

go - 无法将类型 'float64' 的表达式转换为类型 'int64'

go - 将一个unicode字符串转换为数组

wordpress - Redis 仅在数据库中使用 1 个键

opencv - 如何将字符串表示解析回 numpy 数组?