gpt4 book ai didi

javascript - 在 Redis 中存储嵌套的 JavaScript 对象 - NodeJS

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

我最近从 memcached 切换到 nodejs 中的 redis。我喜欢 node-memcached 的一点是我可以将整个 javascript 对象保存在内存中。可悲的是我不能在redis中做到这一点。例如,我得到了以下对象:

var obj = {
name: "Hello world!",
author: "admin",
user: {
"yolololo" : {
"id": "352asdsafaseww",
"server": 5,
"data" : {
x: 1,
y: 1,
z: 50
}
},
"yolol" : {
"id": "358dsa",
"server": 7
}
}
}

3rd-Eden/node-memcached我可以这样做:

memcached.set("obj", obj, 12345, function(err) { });

然后

memcached.get("obj", function(err, data) {
console.log(data);
});

我将按原样获取我保存的对象。

redis 的问题在于,如果我这样保存对象:

redisclient.set("obj", obj, redis.print);

当我得到值时

redisclient.get("obj", function(err, data) {
console.log(data);
});

输出只是包含[object Object] 的字符串。

是的,我知道 Redis 是基于文本的协议(protocol),它正在尝试执行 obj.toString(),但似乎 memcached 会处理对象而 redis 不会。我以为我可以这样做:

redisClient.set("obj", JSON.stringify(obj));

但我不确定这是否会好,因为会有疯狂的高 I/O,而且我不确定 JSON obj->string 是否会成为瓶颈(10k+ 请求/秒)。

Memcached 和Redis 都是将数据存储为字符串,但是redis 是否具有转换对象的内置功能?

最佳答案

首先只支持以下data types :

  1. 字符串
  2. 列表
  3. 设置
  4. 哈希
  5. 有序集

您需要将对象作为字符串存储在 redis 中.

node-memcached自动解析/字符串化数据。但是node-redis没有。

但是,您可以为您的应用实现自己的序列化/反序列化函数。

node-memcached 字符串化对象的方式是 as follows :

if (Buffer.isBuffer(value)) {
flag = FLAG_BINARY;
value = value.toString('binary');
} else if (valuetype === 'number') {
flag = FLAG_NUMERIC;
value = value.toString();
} else if (valuetype !== 'string') {
flag = FLAG_JSON;
value = JSON.stringify(value);
}

它还解析检索到的文本 this way :

switch (flag) {
case FLAG_JSON:
dataSet = JSON.parse(dataSet);
break;
case FLAG_NUMERIC:
dataSet = +dataSet;
break;
case FLAG_BINARY:
tmp = new Buffer(dataSet.length);
tmp.write(dataSet, 0, 'binary');
dataSet = tmp;
break;
}

关于javascript - 在 Redis 中存储嵌套的 JavaScript 对象 - NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18942089/

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