Redis将字符串保存为某些操作系统的缓冲区,而不是其他操作系统
Redis saving strings as buffers on some OSs, not others?
我正在使用Redis 2.2.11与Ubuntu 11.10上的Node,我正在保存一个字符串,但它被返回为缓冲区。
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的形式出来?缓冲区使调试变得非常困难!
在我的本地设置(MacOS 10.6与Redis 2.2.14)中,检索到的数据打印为字符串,很好。我想找到一个在两个系统上都有效的解决方案。
UPDATE:在CentOS 5.7上没有指定编码的情况下也可以正常工作。这是Ubuntu特有的吗?是否有一个全系统的修复?
参见:http://nodejs.org/docs/v0.3.1/api/buffers.html
纯Javascript对Unicode友好,但对二进制数据不友好。当处理TCP流或文件系统时,有必要进行处理八隅体流。Node有几种策略来操作、创建、和消费八位元流。
原始数据存储在Buffer类的实例中。缓冲区是类似于整数数组,但对应于原始内存在V8堆之外分配。不能调整缓冲区的大小。
Buffer对象是全局的
在buffer和JavaScript字符串对象之间转换需要一个显式编码方法。
因为没有指定编码,所以默认情况下显示为原始数据。你可以使用buffer.toString
来生成一个标准的JS字符串
由于您没有指定编码,因此它不知道在打印时使用哪种编码。使用toString函数将编码作为参数来正确地记录它。
client.hmget('user:' + id, "name", function(err, d) {
console.log('data retrieved', d.toString('utf8'));
});
相关文章:
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- 页面可见性API实际上支持操作系统屏幕锁定吗
- MAC操作系统-如何通过Java类运行应用程序(.app)
- 从媒体源源缓冲区动态附加和删除mpeg短划线段
- Node.js服务器和浏览器之间共享二进制缓冲区
- 将ajax数组缓冲区响应绘制到画布中
- 是否有一个支持嵌入HTML页面的跨操作系统GUI框架
- 是否可以将流同步转换为缓冲区
- 从 Node.js 模块中的缓冲区实例中逐行读取字符串
- Protocol Buffers byte[] 数组到节点 Javascript 缓冲区
- 设置操作系统特定的键绑定 - Mac 上的 cmd 并在其他所有内容上按 Ctrl
- 环形缓冲区 - Web 音频 API
- 使用 ajax 时没有从文本到数组缓冲区的转换
- 节点.js从 UTF8 文件创建十六进制缓冲区
- Three.js:如何创建新的'变形'如果我有所有必要的缓冲区
- 与您的操作系统或体系结构不兼容:fsevents@1.0.11.
- 草皮缓冲区和一个可拖动的标记
- Firefox操作系统-在物理硬件上中断XMLHttpRequest数组缓冲区请求
- Redis将字符串保存为某些操作系统的缓冲区,而不是其他操作系统