从node.js查询redis

时间:2015-05-05 23:02:40

标签: mysql node.js redis

我来自传统的SQL背景,正在学习Redis。具体来说,我正在尝试与node.js一起运行redis数据库

我已完成redis的初始设置并尝试了一些基本命令。但是,我想创建一个具有Id,3个学生分数,开始日期和结束日期的数据库。

我相信我可以创建一个存储特定ID的所有值的对象(比如obj),并使用set函数来保存有关该ID的详细信息。

client.set(ID, obj, function(err, reply) {
  console.log(reply);
});

如果我拨打client.get(ID),它将返回我上面保存的对象。但是,我想从特定的开始日期和结束日期获取ID的值。 在SQL中它就像:SELECT * FROM TABLE WHERE StartDATE>='' and endDate='' and id= ID;

redis的替代方案是什么?我还没有能够在node.js中找到redis的任何查询示例

同时在插入数据库时​​,整个插入对象是最好的方法吗?

3 个答案:

答案 0 :(得分:2)

  

同时在插入数据库时​​,整个插入对象是最好的方法吗?

不,不是您提出的示例查询。 Redis不是一个传统的数据库,它更多like a key value store,它不了解你的对象的结构。

如果您想按照建议进行查询,则可能使用了错误的工具。

在redis中你不会存储一个对象,但是你可以存储更简单的结构,比如哈希。窃取node_redis示例:

client.hmset("hosts", "mjr", "1", "another", "23", "home", "1234");
client.hgetall("hosts", function (err, obj) {
    console.dir(obj);
});

输出:

{ mjr: '1', another: '23', home: '1234' }

有关详细信息,请查看此处的redis文档:http://redis.io/commands

答案 1 :(得分:1)

这个问题实际上由两个组成:存储对象和索引。

您可以通过多种不同的方式在Redis中存储对象 - 诀窍是找到最适合您的数据及其操作的数据结构。将您的JSON字符串存储在Redis字符串中非常简单,但请注意,任何更新都需要解析整个JSON,进行修改然后重写整个事情(提示:如果你这样做,请查看Redis' Lua脚本并且专门学习使用cjson库 - 在这种情况下它可能是无价的)。或者,您可以将对象分解为Redis Hashes - 这稍微复杂一些,因为它需要一些手动映射,但允许字段级访问。 OTOH,如果您尝试从Hash数据类型重新组装JSON,这种方法可能会很有挑战性。

Redis没有内置索引,因此要按特定属性(例如创建日期)获取数据,您需要在Redis中创建和维护类似索引的数据结构。做你正在寻找的东西的一种方法是使用Redis'排序集。保留一个排序集,其中包含所有(obj)ID作为成员,并将每个成员的分数设置为其创建日期(例如,在unix时期)。然后,要获取两个给定日期之间的所有ID,请使用Redis' ZRANGEBYSCORE

更多指示:

答案 2 :(得分:0)

您可以按照给出的示例:

var redis = require('redis');
var port=13235;//Your Redis cloud port number
var host='redis-13235.c14.us-east-11-12.ec4.cloud.redislabs.com';//Your redis cloud host
var pass='password';//Redis cloud password
var client = redis.createClient(port,host, {no_ready_check: true});
client.auth(pass, function (err) {
    if (err) throw err;
});
client.on('connect', function() {
    console.log('connected......\n welcome to redis cloud !!!');
});

for(var i=0;i<10;i++){
client.set('TEST_TIME'+i,new Date().getTime());
}
for(var i=0;i<10;i++){
client.get('TEST_TIME'+i, function (err, reply) {
    console.log(reply.toString()); 
});
}

请查看以下链接以获取更多信息:https://www.sitepoint.com/using-redis-node-js/