2012-10-08 47 views
3

红色是使用散列,我需要存储具有多个字段和值的散列键。 我试过如下:在节点中使用redis获取散列键的所有字段和值

client.hmset("Table1", "Id", "9324324", "ReqNo", "23432", redis.print); 
client.hmset("Table1", "Id", "9324325", "ReqNo", "23432", redis.print); 
var arrrep = new Array(); 

client.hgetall("Table1", function(err, rep){ 
console.log(rep); 
}); 

输出是:{ Id: '9324325', ReqNo: '23432' }

我得到只有一个值。如何获得散列键中的所有字段和值?如果我错了,请帮助我,让我获得代码。谢谢。

回答

5

您正在获取一个值,因为您覆盖了以前的值。

client.hmset("Table1", "Id", "9324324", "ReqNo", "23432", redis.print); 

这会将Id,ReqNo添加到Table1散列对象。

client.hmset("Table1", "Id", "9324325", "ReqNo", "23432", redis.print); 

这覆盖了Table1哈希对象的Id和ReqNo。此时,散列中只有两个字段。

实际上,您的问题来自您试图将关系数据库模型映射到Redis的事实。你不应该。使用Redis时,最好从数据结构和访问路径角度考虑。

您需要为每个记录存储一个哈希对象。例如:

HMSET Id:9324324 ReqNo 23432 ... and some other properties ... 
HMSET Id:9324325 ReqNo 23432 ... and some other properties ... 

然后,您可以使用一组存储的ID:

SADD Table1 9324324 9324325 

最后检索相关的表1收集ReqNo数据:

SORT Table1 BY NOSORT GET # GET Id:*->ReqNo 

如果您还想搜索与给定ReqNo关联的所有ID,则需要另一种结构来支持此访问路径:

SADD ReqNo:23432 9324324 9324325 

所以,你可以通过使用获得的ID备案23432的列表:

SMEMBERS ReqNo:23432 

换句话说,不要试图转关系模型:只要创建支持您的使用情况下,您自己的数据结构。

+0

感谢Didier :)会检查这个。 – vinod

+0

你能帮助我如何在节点“SORT Table1 BY NOSORT GET#GET Id:* - > ReqNo”中使用这一行,并显示与ID相对应的所有字段吗? – vinod

+0

如果我只是给出代码,它不会帮助你:你真的需要亲自尝试。这并不难。使用SORT,您只能检索一组预定义的字段。要检索所有字段,您需要对SMEMBERS的结果使用HGETALL。 –

相关问题