node.js - Redis、Node.JS 和唯一 ID

标签 node.js redis

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

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

最佳答案

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

  1. 用户

    • ID
    • 姓名
    • 父级(哪个用户在系统中负责该用户)
  2. 小部件

    • 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/

相关文章:

jquery - jsdom:使用 jQuery 将脚本附加到正文

redis - 在 Redis 中查找不会过期的键

redis - 使用 Redis 将唯一 ID 存储为包含其他键列表的键

redis - 使用 ServiceStack Redis 进行分布式锁定的互斥违规

c# - 将数据推送到列表时,对 Redis 中持有错误类型值的键进行操作

node.js - 错误: error:2006D080:BIO routines:BIO_new_file:no such file

MySQL数据库Nodejs,初始表查询

ios - 在 Swift 中使用 NSStream 连接到 Redis 服务器

javascript - Express 500 类型错误 : Cannot read property 'get' of undefined

javascript - 尝试访问js文件中的ejs数组