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

时间:2014-11-10 10:12:23

标签: arrays node.js redis

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

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

或其他一些类型,只要它是node.js。

1 个答案:

答案 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