Redis在某些操作系统上将string保存为缓冲区,而不是其他?

我在Ubuntu 11.10上使用了Redis 2.2.11和Node,我保存了一个string,但是它以缓冲区的forms返回。

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> ] 

为什么它作为一个string进入,并作为一个缓冲区出来? 缓冲区使debugging非常困难!

在我的本地设置(使用Redis 2.2.14的MacOS 10.6)中,检索到的数据打印为string,就好了。 我想find一个解决scheme,继续在两个系统上工作。

更新:它也工作正常,没有在CentOS 5.7指定的编码。 这是特定于Ubuntu的东西吗? 是否有全系统修复?

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

纯Javascript是Unicode友好的,但对二进制数据不好。 在处理TCP流或文件系统时,有必要处理八位字节流。 节点有几个操作,创建和消费八位字节流的策略。

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

Buffer对象是全局的。

缓冲区和JavaScript字符串对象之间的转换需要一个明确的编码方法。

由于您没有指定编码,所以默认显示为原始数据。 你可以使用buffer.toString来产生一个标准的JS字符串。

由于您没有指定编码,因此在打印时不知道使用什么编码。 使用带编码的toString函数作为参数来正确记录它。

 client.hmget('user:' + id, "name", function(err, d) { console.log('data retrieved', d.toString('utf8')); });