最近、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 にはオブジェクトを変換する組み込み機能がありますか?