我在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')); });