从node.js中的redis查询



我来自传统的SQL背景,正在学习Redis。具体来说,我试图与node.js

一起运行redis数据库

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

我相信我可以创建一个对象,该对象存储特定ID的所有值(例如obj),并使用设置功能来保存有关该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的替代方案是什么?我找不到redis的任何查询示例

同样,在插入数据库时,将对象插入最佳方法?

同时,在插入数据库时,将对象插入最佳方法?

否,不是您建议的示例查询。redis不是传统数据库,它更像是一个关键值存储,它不了解您的对象的结构。

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

在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

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

您可以以许多不同的方式将对象存储在REDIS中 - 诀窍是找到适合您数据的数据结构和最佳的操作。像Redis字符串中存储JSON字符串很简单,但请注意,任何更新都需要对整个JSON进行解析,进行修改,然后重写整个内容(提示:如果您这样走,请查看REDIS的LUA脚本并专门学习使用CJSON库 - 在这种情况下它可能是无价的)。另外,您可以将对象分解为redis哈希 - 这要复杂得多,因为它需要一些手动映射,但允许字段级别的访问。OTOH,如果您试图重新组装哈希数据类型。

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

更多指针:

  • 将javascript对象存储在redis中的node.js正确的方式
  • redis索引

对于仍在寻找解决方案的人,您应该知道,自2021年11月以来,Redis引入了Redis OM:Redis的对象映射库

https://redis.io/docs/stack/get-started/tutorials/stack-node/

https://github.com/redis/redis-om-node

您可以按照给定的示例:

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/ususion-redis-node-js/

最新更新