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

我最近在nodejs中从memcached切换到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是基于文本的协议,并且正在尝试执行obj.toString(),但是memcached似乎可以处理对象,而redis则不需要。我以为我可以做到:

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

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

second)。

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

回答:

首先,redis仅支持以下数据类型:

  1. 清单
  2. 杂凑
  3. 排序集

您需要将对象以字符串形式存储在 和memcached中。

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

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

顺便 stringifies一个目的是如下:

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);

}

它还以这种方式解析检索到的文本:

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;

}

以上是 在Redis中存储嵌套的JavaScript对象-NodeJS 的全部内容, 来源链接: utcz.com/qa/429898.html

回到顶部