我们可以在Redis中将32位int数组作为一个键值设置为node.js中的二进制数据吗?

我想使用node.js将int数组设置为redis作为二进制数据,每个int数字必须是4个字节。 我该怎么做,并得到它? 价值可以

var arr=[0,1,2,3,4]; var arr=new Int32Array([0,1,2,3]); 

或者其他一些types,只要是node.js。

node-redis客户端支持发送缓冲区作为命令参数。 要将32位的types数组转换为原始的Buffer ,您需要从32位数组的缓冲区视图创build一个8位的types数组。 在创buildredis连接时,传递configuration{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); }); 

这不是一个跨平台的解决scheme,因为types化数组使用本地字节顺序。 为了确保您始终设置并获取big-or-endian值,请使用DataView :