How to search in redis for hash keys?

后端 未结 2 1909
终归单人心
终归单人心 2021-01-30 20:56

I\'m using hash keys to store user details like:

 hmset user:1 user_name lee  age 21
 hmset user:2 user_name david  age 25
 hmset user:3 user_name chris  age 25
         


        
相关标签:
2条回答
  • 2021-01-30 21:49

    Acually You can do it with put values in key

    HMSET lee:25 user_name lee age 25
    HMSET massi:43 user_name massi age 43
    HMSET lee:24 user_name lee age 24
    HMSET lee:28 user_name lee age 28 city Berlin
    

    Now you can find them with "keys" command

    127.0.0.1:6379> keys *:25
    1) "lee:25"
    127.0.0.1:6379> keys lee*
    1) "lee:25"
    2) "lee:24"
    3) "lee:28"
    127.0.0.1:6379> keys massi:43
    1) "massi:43"
    

    Finally find specific hashes

    127.0.0.1:6379> HGETALL lee:24
    1) "user_name"
    2) "lee"
    3) "age"
    4) "24"
    

    All that I said is that you can do it in two steps put any number of values that you need in key then find them. But consider that it's not a good idea to put all values inside key Just put ones that you need to do filtering with. Cheers :)

    0 讨论(0)
  • 2021-01-30 21:52

    You cannot. Redis is a key-value store, not a relational database.

    In order to search for a specific data, you need to build an access path to this data. For instance, to get the users having age = 25, you need to build an index to map the age values to users. It can be done with a set. This is the same for the name.

    Once you have sets for age and name, you can search users by intersecting the sets. For example:

    # Add 3 users
    hmset user:1 user_name lee age 21
    hmset user:2 user_name david age 25
    hmset user:3 user_name chris age 25
    
    # Maintain age index
    sadd age:21 1
    sadd age:25 2 3
    
    # Maintain name index
    sadd name:lee 1
    sadd name:david 2
    sadd name:chris 3
    
    # Get the ID of users having age = 25 and name = lee
    sinter age:25 name:lee
      -> will return an empty set
    
    0 讨论(0)
提交回复
热议问题