【发布时间】:2013-09-22 09:04:25
【问题描述】:
我最近在 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+ 请求/秒)。
Memcached 和 Redis 都将数据存储为字符串,但是 redis 有没有内置的对象转换功能?
【问题讨论】:
-
我认为 memcached 将数据存储为字符串。 node-memcached 自动执行(反)序列化过程。
-
@fardjad 是的,你说得对,但是Redis有这样的内置过程还是我需要手动转换?
标签: javascript node.js object redis memcached