在redis键/值内使用多个值进行search

我被告知在我的Heroku应用程序中使用Redis进行authentication的用户,所以我决定跳槽。 我想要做的是在Redis商店中存储用户的哈希值,如下所示:

{ id:4532143215432, username:'davejlong', email:'dave@davejlong.com' } 

然后我希望能够通过用户名或ID进行search。 不知何故,Redis可以这样做吗?

我正在使用支持任何redis命令的node.js redis模块https://github.com/mranney/node_redis

@orangeoctopus usecae中几乎没有问题。

redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong​​ emaildave@davejlong​​.com确定redis 127.0.0.1:6379> HMSET用户:davejlong​​ id 4532143215432电子邮件dave@davejlong​​.com好的

这会造成重复,考虑添加新的值并删除和更新。

所以我更喜欢这个

 SET user:davejlong 1 HMSET user:1 username davejlong email dave@davejlong.com 

1)如果是用户名

  redis.get('user:davejlong',function(err,id){ console.log('User Id of @davejlong: ' + id); redis.hgetall('user:'+id,function(err,user){ console.log('User Data: ' + user); }) }) 

2)如果是Id

  redis.hgetall('user:1',function(err,user){ console.log('User Data: ' + user); }) 

这就像存储每个用户两次一样简单。 一次用id的键,一次用用户名的键。

在内存方面做一个更紧凑的方法是把用户名input到id,所以你的用户名查询会像这样:query by username,get id; 把身份证,获取信息。

不幸的是,没有一种好方法可以通过两个不同的键来input相同的实际数据。


例如,当你插入一个新用户然后查询它时:

 redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong email dave@davejlong.com OK redis 127.0.0.1:6379> HMSET user:davejlong id 4532143215432 email dave@davejlong.com OK redis 127.0.0.1:6379> HGET id:4532143215432 username "davejlong" redis 127.0.0.1:6379> HGET user:davejlong id "4532143215432" redis 127.0.0.1:6379> HMGET user:davejlong email id 1) "dave@davejlong.com" 2) "4532143215432" redis 127.0.0.1:6379> DEL user:davejlong (integer) 1 redis 127.0.0.1:6379> DEL id:4532143215432 (integer) 1 

请注意,当我创build用户时,我使用了两次HMSET。 现在,我可以查询用户名或ID。 我现在也必须删除两个键。