Redis,Node.JS和唯一ID

时间:2014-06-02 19:28:01

标签: node.js redis

使用Node.JS和Redis处理唯一标识符的正确方法是什么?我正在寻求从MongoDB / Mongoose切换到Redis。在那里,我创建了一个获取_id字段的Document。我可以在其他文档中使用它,链接回来。然后我可以使用findByID()来检索文档。

我想在Redis中完成同样的事情。

1 个答案:

答案 0 :(得分:4)

为简单起见,我们假设您的系统中有两种类型的对象:userswidgets。这些对象中的每一个都将作为哈希存储在Redis中。下面是每个对象类型在其哈希中具有的字段:

  1. 用户

    • ID
    • 名称
    • parent(用户在系统中负责此用户)
  2. 插件

    • ID
    • 名称
    • 所有者(该用户拥有此小部件)
  3. 用户的父字段和窗口小部件的所有者字段将像外键一样,通过该对象的ID引用其他对象。

    使用此配置,您需要系统中的其他几个键:user:id和widget:id。这些将用作用户和窗口小部件ID的自动增量值。每当将新用户或窗口小部件添加到系统时,您将运行INCR命令:

    INCR user:id     # new user ID
    INCR widget:id   # new widget ID
    

    然后,您将使用返回的INCR值作为对象的主键。以下是添加新用户的一些伪代码:

    var newUserId = redis('INCR')
    var newUserKey = 'user:' + newUserId
    
    redis('HMSET', [newUserKey,
        'id', newUserId,
        'name', username,
        'parent', parentUserId
    ])
    

    您可以看到如何稍微调整上述代码以添加新的小部件。

    让我们说某人从您的系统请求小部件#55。首先,我们将使用该ID获取小部件,然后我们将按ID获取小部件的所有者。下面是伪代码:

    var widgetId = req.params.id // 55
    var widgetKey = 'widget:' + widgetId  
    var widgetObject = redis('HGETALL', [widgetKey])
    
    var userKey = 'user:' + widgetObject.owner
    var userObject = redis('HGETALL', [userKey])
    
    // Do something with widgetObject and userObject