【问题标题】:Get all fields and values of hash key using redis in node在节点中使用redis获取哈希键的所有字段和值
【发布时间】:2012-10-08 22:35:18
【问题描述】:

红色是使用哈希,我需要存储具有多个字段和值的哈希键。 我尝试如下:

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' }

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

【问题讨论】:

    标签: node.js redis


    【解决方案1】:

    你得到一个值是因为你覆盖了之前的值。

    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
    

    最后检索与Table1集合关联的ReqNo数据:

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

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

    SADD ReqNo:23432 9324324 9324325
    

    因此,您可以使用以下方法获取记录 23432 的 ID 列表:

    SMEMBERS ReqNo:23432
    

    换句话说,不要尝试转置关系模型:只需创建自己的数据结构来支持您的用例。

    【讨论】:

    • 谢谢 Didier :) 会检查的。
    • 你能帮我看看如何在节点“SORT Table1 BY NOSORT GET # GET Id:*->ReqNo”中使用这一行并显示与ID对应的所有字段吗?
    • 我只给出代码对你没有帮助:你真的需要自己尝试看看。这并不难。使用 SORT,您只能检索一组预定义字段。要检索所有字段,您需要对 SMEMBERS 的结果使用 HGETALL。
    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 2015-01-02
    • 1970-01-01
    • 2018-08-03
    • 2013-09-24
    • 2021-12-30
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多