我想使用node.js将int数组设置为redis作为二进制数据,每个int数必须是4个字节。 我怎么做才能得到它? 值可以是
var arr=[0,1,2,3,4];
var arr=new Int32Array([0,1,2,3]);
或其他一些类型,只要它是node.js。
答案 0 :(得分:2)
node-redis客户端支持将缓冲区作为命令参数发送。要将32位类型数组转换为原始Buffer
,您需要从32位数组的缓冲区视图中创建一个8位类型数组。创建redis连接时,请传递配置{return_buffers: true}
以防止客户端将命令回复转换为JavaScript值。
function setArray (key, untypedArray, fn) {
var int32 = new Int32Array(untypedArray),
int8 = new Int8Array(int32.buffer),
bytes = new Buffer(int8);
redis.set(key, bytes, fn);
}
function getArray (key, fn) {
var bytes = redis.get(key, function (err, bytes) {
if(err) return fn(err);
var int32 = new Int32Array(bytes.toArrayBuffer());
fn(null, int32);
});
}
var redis = require('redis').createClient({return_buffers: true});
setArray('bytes', [22,33, 1 << 31], function () {
getArray('bytes', console.log);
});
这不是跨平台解决方案,因为类型化数组使用本机字节顺序。要确保始终设置并获取大端或小端值,请使用DataView: