【问题标题】:Searching by multiple values within a redis key/value在 redis 键/值中搜索多个值
【发布时间】:2011-10-28 18:39:48
【问题描述】:

有人告诉我在 Heroku 上的应用程序中使用 Redis 存储经过身份验证的用户,所以我决定今天加入。我想要做的是将用户的哈希存储在 Redis 存储中,如下所示:

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

然后我希望能够通过用户名或 ID 进行搜索。 Redis 有可能以某种方式实现吗?

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

【问题讨论】:

    标签: node.js redis


    【解决方案1】:

    @orangeoctopus usecae 中的问题很少。

    redis 127.0.0.1:6379> HMSET id:4532143215432 用户名 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) 如果是身份证

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

    【讨论】:

    • 我用“一种更紧凑的方式来做这件事......”避开了这一点,但我懒得打字了。 +1
    • 对不起,因为您没有添加通过邮件查找的功能,所以我错过了重点。 SET user:dave@davejlong.com 1,您可以通过邮件找到
    【解决方案2】:

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

    在内存方面执行此操作的一种更紧凑的方法是将用户名作为 id 的键,因此您的用户名查询类似于:按用户名查询,获取 id;输入id,获取信息。

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


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

    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
    

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

    【讨论】:

    • 您能告诉我如何在 CLI 中执行此操作吗?我对所有这些 redis 东西都是全新的,所以我不确定是否使用哈希、列表等。
    • 您在此处创建重复数据。考虑使用索引。
    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 2019-01-30
    • 2015-07-10
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多