簡體   English   中英

從 node.js 查詢 redis

[英]Querying in redis from node.js

我來自傳統的 SQL 背景,正在學習 Redis。 具體來說,我正在嘗試運行 redis 數據庫以及 node.js

我已經完成了 redis 的初始設置並嘗試了一些基本命令。 但是我想創建一個數據庫,它有一個 ID、3 個學生標記、開始日期和結束日期。

我相信我可以創建一個 object 來存儲特定 ID(比如obj )的所有值,並使用 set function 來保存有關該 ID 的詳細信息。

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

如果我調用client.get(ID) ,它將返回我在上面保存的 object 。 但是,我想從特定的開始日期和結束日期獲取 ID 的值。 在 SQL 中,它會像: SELECT * FROM TABLE WHERE StartDATE>='' and endDate='' and id= ID;

redis 中的替代方案是什么? 我無法在 node.js 中找到 redis 的任何查詢示例

另外在插入數據庫時,將 object 作為一個整體插入 go 的最佳方法是什么?

另外,在插入數據庫時​​,將對象整體插入是最好的方法嗎?

不,不是您建議的示例查詢。 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,如果您嘗試從Hash數據類型重組JSON,則此方法可能會遇到挑戰。

Redis沒有內置索引,因此要通過特定屬性(例如創建日期)來獲取數據,您需要在Redis中創建並維護類似於索引的數據結構。 做您要尋找的一種方法是使用Redis的排序集。 保留一個以您所有( obj )ID作為成員的排序集,並將每個成員的得分設置為其創建日期(例如,在unix時代)。 然后,要獲取兩個給定日期之間的所有ID,請使用Redis的ZRANGEBYSCORE

更多指針:

您可以按照給出的示例進行操作:

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/

For people still looking for a solution, you should know that since Nov 2021, Redis has introduced Redis OM: an object mapping library for Redis

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM