使用 Node.JS 和 Redis 处理唯一标识符的正确方法是什么?我希望从 MongoDB/Mongoose 切换到 Redis。我在那里创建了一个包含 _id 字段的文档。我可以在其他文档中使用它来链接回它们。然后我可以使用 findByID() 来检索文档。
我想在 Redis 中完成同样的事情。
最佳答案
为了简单起见,我们假设您的系统中有两种类型的对象:用户
和小部件
。这些对象中的每一个都将作为哈希值存储在 Redis 中。以下是每个对象类型在其哈希中具有的字段:
用户
- ID
- 姓名
- 父级(哪个用户在系统中负责该用户)
小部件
- ID
- 姓名
- 所有者(哪个用户拥有此小部件)
用户的父字段和小部件的所有者字段将像外键一样通过该对象的 ID 引用其他对象。
使用此配置,您的系统中还需要几个其他键:user:id 和 widget:id。这些将用作用户 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
关于node.js - Redis、Node.JS 和唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001813/