gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:05:37 25 4
gpt4 key购买 nike

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

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

或者其他类型,只要是node.js即可。

最佳答案

node-redis 客户端支持将缓冲区作为命令参数发送。要将 32 位类型数组转换为原始 Buffer,您需要从 32 位数组的缓冲区 View 创建一个 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);
});

这不是跨平台解决方案,因为类型化数组使用 native 字节顺序。为确保始终设置和获取大端或小端值,请使用 DataView :

关于arrays - 我们可以将 32 位 int 数组设置为 Redis 中的键值作为 node.js 中的二进制数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com