我在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特有的吗?是否有系统范围的修复程序?
请参阅:http : //nodejs.org/docs/v0.3.1/api/buffers.html
纯Javascript对Unicode友好,但对二进制数据不利。处理TCP流或文件系统时,必须处理八位位组流。Node有几种用于操纵,创建和使用八位字节流的策略。 原始数据存储在Buffer类的实例中。缓冲区类似于整数数组,但对应于V8堆外部的原始内存分配。缓冲区无法调整大小。 Buffer对象是全局的。 在缓冲区和JavaScript字符串对象之间进行转换需要一种显式的编码方法。
纯Javascript对Unicode友好,但对二进制数据不利。处理TCP流或文件系统时,必须处理八位位组流。Node有几种用于操纵,创建和使用八位字节流的策略。
原始数据存储在Buffer类的实例中。缓冲区类似于整数数组,但对应于V8堆外部的原始内存分配。缓冲区无法调整大小。
Buffer对象是全局的。
在缓冲区和JavaScript字符串对象之间进行转换需要一种显式的编码方法。
由于未指定编码,因此默认情况下它将显示为原始数据。您可以buffer.toString用来生成标准的JS字符串。
buffer.toString