使用Node.JS和Redis处理唯一标识符的正确方法是什么?我正在寻求从MongoDB / Mongoose切换到Redis。在那里,我创建了一个获取_id字段的Document。我可以在其他文档中使用它,链接回来。然后我可以使用findByID()来检索文档。
我想在Redis中完成同样的事情。
答案 0 :(得分:4)
为简单起见,我们假设您的系统中有两种类型的对象:users
和widgets
。这些对象中的每一个都将作为哈希存储在Redis中。下面是每个对象类型在其哈希中具有的字段:
用户
插件
用户的父字段和窗口小部件的所有者字段将像外键一样,通过该对象的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