将redis键转换为javascript对象?

将redis键转换为javascript对象?,javascript,json,string,redis,Javascript,Json,String,Redis,我想从redis抓取所有用户并将其传递到我的模板中 返回的是一个类似于['users:nick','users:mike'] 我不想对其进行正则化,我想将用户名存储在对象数组中[{username:'nick'}] redisSessionClient.keys("users:*", function(err, users) { if(err) { console.log(err); return; } for (i = 0; i < users.length

我想从redis抓取所有用户并将其传递到我的模板中

返回的是一个类似于
['users:nick','users:mike']

我不想对其进行正则化,我想将用户名存储在对象数组中
[{username:'nick'}]

redisSessionClient.keys("users:*", function(err, users) {
  if(err) {
    console.log(err);
    return;
  }

  for (i = 0; i < users.length; i++) {
    console.log(users[i])
  }

  res.render('chat', req.user);
});
RedisessionClient.key(“用户:”),函数(err,users){
如果(错误){
控制台日志(err);
返回;
}
对于(i=0;i

我想我对redis的做事方式和语法有点困惑,所以我愿意接受任何建议。

redis使用字符串作为键,因此您只需解析它:

redisSessionClient.keys('users:*', function(err, users) {
  var newArray = users.map(function(user) {
    return {
      username: user.split(':')[1]
    };
  });

  // newArray is what you wanted
});
编辑:鉴于这个答案被接受,我将回应大家对为什么在生产中使用
键不合适的担忧

查询Redis中的所有密钥需要O(n)个时间,其中n是存储的密钥总数。因此,如果您有一百万个密钥,但其中只有200k个密钥具有
用户:
前缀,那么使用
密钥
获取所有用户名的列表,实际上浪费了800k个操作。这是一项昂贵的操作,可能会对生产应用程序的性能产生重大影响


Matias的回答是一个很好的例子,说明了如果您有一组所有用户名,如何使用这些命令。

Redis使用字符串作为键,因此您只需解析它:

redisSessionClient.keys('users:*', function(err, users) {
  var newArray = users.map(function(user) {
    return {
      username: user.split(':')[1]
    };
  });

  // newArray is what you wanted
});
编辑:鉴于这个答案被接受,我将回应大家对为什么在生产中使用
键不合适的担忧

查询Redis中的所有密钥需要O(n)个时间,其中n是存储的密钥总数。因此,如果您有一百万个密钥,但其中只有200k个密钥具有
用户:
前缀,那么使用
密钥
获取所有用户名的列表,实际上浪费了800k个操作。这是一项昂贵的操作,可能会对生产应用程序的性能产生重大影响


Matias的回答是一个很好的例子,说明了如果您有一组所有用户名,如何使用这些命令。

您需要的是将所有昵称存储在一组中,然后只需在set键上调用
smembers
sscan

无论何时注册新用户,您都需要将用户添加到任何需要的位置,并将昵称按原样添加到名为的集合中,例如,
users:names

也就是说,如果您使用以下代码调用
smembers
sscan
,您将正确完成任务:

redisSessionClient.smembers('users:names', function(err, userNames) {
  var newArray = userNames.map(function(userName) {
    return {
      username: userName
    };
  });
});
最后,在使用Redis时,您需要改变主意:如果需要获取某个实体的某些属性值,则需要单独存储这些值并获取它们。这就像处理原始索引一样


不管怎样,看一看,进一步,甚至得到一个更好的方法。在简单的情况下,而不是在大型数据库中,
smembers
应该很好。

您需要的是将所有昵称存储在一个集合中,只需在set键上调用
smembers
sscan

无论何时注册新用户,您都需要将用户添加到任何需要的位置,并将昵称按原样添加到名为的集合中,例如,
users:names

也就是说,如果您使用以下代码调用
smembers
sscan
,您将正确完成任务:

redisSessionClient.smembers('users:names', function(err, userNames) {
  var newArray = userNames.map(function(userName) {
    return {
      username: userName
    };
  });
});
最后,在使用Redis时,您需要改变主意:如果需要获取某个实体的某些属性值,则需要单独存储这些值并获取它们。这就像处理原始索引一样


不管怎样,看一看,进一步,甚至得到一个更好的方法。在简单的情况下,而不是在大型数据库中,
smembers
应该很好。

如果您在应用程序代码中使用
键(或者,在您的情况下,
RedisessionClient.KEYS
),请为痛苦的世界做好准备。好的,很高兴知道。。。我并没有实际使用它,只是为了一个测试用户登录系统,我正在玩。@MichaelJosephAubry检查我新添加的答案。你选的那个是非常非常错误的。正如Itama所说,您不能在应用程序代码上使用
命令!!!!!!!!如果您在应用程序代码中使用
(或者在您的情况下使用
RedisessionClient.KEYS
),请做好痛苦世界的准备。好的,很高兴知道。。。我并没有实际使用它,只是为了一个测试用户登录系统,我正在玩。@MichaelJosephAubry检查我新添加的答案。你选的那个是非常非常错误的。正如Itama所说,您不能在应用程序代码上使用
命令!!!!!!!!这个答案是错误的<代码>密钥
不得在应用程序代码中使用。同意,在生产中推荐密钥是错误的做法。不会降低答案的正确性,特别是考虑到他已经在示例中使用了
密钥
。此外,上面OP的评论指出,这是一个非生产测试。事实上,在Redis.OP上编写脚本/运行独立查询时,我一直在使用
键,其他读者访问它是因为他们想学习技术。我认为你的观点没有有力的论据。事实上,这个命令的问题不是它的复杂性,而是它的阻塞性。我完全不想回答这个问题,因为它提供了一个非常错误的开发模式。整个命令都是为了在Redis CLI中进行维护而使用的……这个答案是错误的<代码>密钥
不得在应用程序代码中使用。同意,在生产中推荐密钥是错误的做法。不会降低答案的正确性,特别是考虑到他已经在示例中使用了
密钥
。此外,上面OP的评论指出,这是一个非生产测试。事实上,我在编写脚本/运行脚本时总是使用