小编典典

Redis将字符串保存为某些OS上的缓冲区,而不是其他OS?

redis

我在Ubuntu 11.10上使用带有节点的Redis 2.2.11,并且保存了一个字符串,但该字符串作为缓冲区返回。

    id = 1234;
    console.log('data', data);
    client.hmset("user:" + id, "name", data['name'] );
    client.hmget('user:' + id, "name", function(err, d) {
        console.log('data retrieved', d);
    });

这将在控制台上产生以下内容:

data { name: 'RealServer' }
data retrieved [ <Buffer 41 6e 6e 61 52 65 61 6c 53 65 72 76 65 72> ]

为什么它以字符串形式进入并以Buffer形式出现?缓冲区使调试非常困难!

在我的本地设置(带有Redis 2.2.14的MacOS 10.6)上,检索到的数据打印为字符串,就好了。我想找到一个在两个系统上都可以继续使用的解决方案。

更新:如果没有在CentOS 5.7上指定编码,它也可以正常工作。这是Ubuntu特有的吗?是否有系统范围的修复程序?


阅读 219

收藏
2020-06-20

共1个答案

小编典典

请参阅:http :
//nodejs.org/docs/v0.3.1/api/buffers.html

纯Javascript对Unicode友好,但对二进制数据不利。处理TCP流或文件系统时,必须处理八位位组流。Node有几种用于操纵,创建和使用八位字节流的策略。

原始数据存储在Buffer类的实例中。缓冲区类似于整数数组,但对应于V8堆外部的原始内存分配。缓冲区无法调整大小。

Buffer对象是全局的。

在缓冲区和JavaScript字符串对象之间进行转换需要一种显式的编码方法。

由于未指定编码,因此默认情况下它将显示为原始数据。您可以buffer.toString用来生成标准的JS字符串。

2020-06-20