【问题标题】:Redis messages contain unicode?Redis 消息包含 unicode?
【发布时间】:2019-05-02 19:14:15
【问题描述】:

我目前正在从 Redis 服务器和 Redis-Cli 监视器读取信息,我正在接收发布的消息,其中包含介于 unicode 之间的数据,如下所示:

\x93\xa6Xz05FH\x83\xa4type\x02\xa4data\x92\xad

这是由一些与 redis 相关的东西生成的还是因为原始发布者?

如果我发布消息没有附加 unicode,所以我很难相信这是 Redis 做的,但我想确定。

【问题讨论】:

    标签: c# redis stackexchange.redis


    【解决方案1】:

    Redis 不关心事物的格式,除非您使用诸如incrhincrby 等数字运算符;除此之外,字符串、散列字段、发布/订阅负载等都是二进制安全的不透明值,纯粹由客户端指定的内容定义。由于您提到了 StackExchange.Redis,如果您使用 .NET string 来填充 RedisValue,那么 string 将使用 UTF-8 编码。但是,还有其他方法可以填充 RedisValue 以指定任意二进制有效负载 - 其中最常见的是 byte[]

    redis-cli - 因为它是一个基于文本的工具 - 有可能通过“某些东西看起来不是 ASCII / 不可打印”的简单启发式切换到这种表示 - \x02 看起来特别可疑(那是STX?)。但是publish 上流经 redis 的实际数据是原始二进制文件。

    【讨论】:

    • 如果我打印出 RedisValue,我会得到一堆带有 ?s 的钻石。 ehich 仍然没有帮助。我真的需要知道如何模仿这条信息]
    • @Chris 听起来像是任意二进制,然后;发布代码是什么样的?请注意,您可以将 RedisValue 转换为 byte[] 或类似的形式来使用此类数据。例如,在我的日常工作中,我经常以 protobuf 序列化格式广播有效负载,这不利于文本显示。
    • 我们似乎没有太多关于发布代码的信息。我可以编写一个解析器来接收数据,不管它是什么。我需要做的是能够复制这些消息并自己发送它们。这是一个不同的项目,需要沟通
    • @Chris 很公平,但是:redis 只是广播publish 发送的任何内容,这是一个不透明的二进制有效负载; redis-cli 工具 尝试 将其显示为 ASCII 如果它看起来像 ASCII,但如果它显然不是 ASCII,它将转义它的一部分,以便显示仍然可读;这并不意味着原始有效负载包含这些东西——让它在文本工具中可读只是一个善意的谎言。至于原始有效载荷是什么:这取决于称为publish的任何代码
    • 正确。谢谢
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2013-06-12
    • 2016-11-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多