복붙노트

[REDIS] 어떻게 해시 키에 대한 레디 스에서 검색하려면?

REDIS

어떻게 해시 키에 대한 레디 스에서 검색하려면?

나는 사용자 정보를 같이 저장하는 해시 키를 사용하고 있습니다 :

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

나는 나이 = 25, 이름 = 리를 가진 사용자를 검색 할 필요가있다. 어떻게 주어진 필드에 지정된 값에 대한 검색을 할까?

해결법

  1. ==============================

    1.당신은 할 수 없습니다. 레디 스는 키 - 값 저장소가 아닌 관계형 데이터베이스입니다.

    당신은 할 수 없습니다. 레디 스는 키 - 값 저장소가 아닌 관계형 데이터베이스입니다.

    특정 데이터를 검색하기 위해,이 데이터에 액세스 경로를 구축해야합니다. 예를 들어, 사용자가 나이 = 25을 가지고 얻을, 당신은 사용자에게 나이 값을 매핑하는 인덱스를 구축해야합니다. 그것은 세트를 수행 할 수 있습니다. 이 이름에 대해 동일합니다.

    당신은 나이와 이름에 대한 설정이되면, 당신은 세트를 교차하여 사용자를 검색 할 수 있습니다. 예를 들면 :

    # 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
    
  2. ==============================

    2.사실 당신은 키에 넣어 값으로 그것을 할 수 있습니다

    사실 당신은 키에 넣어 값으로 그것을 할 수 있습니다

    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
    

    지금 당신은 "키"명령을 찾을 수 있습니다

    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"
    

    마지막으로 특정 해시를 찾을 수

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

    내가 말한 모든 것은 두 단계에서 할 당신이 다음을 찾을 키 필요 값의 수를 넣을 수 있다는 것입니다. 그러나 키 그냥 당신이 함께 필터링 할 필요가 사람을 넣어 내부의 모든 값을 넣어 좋은 생각이 아니라고 생각. 건배 :)

  3. from https://stackoverflow.com/questions/11470468/how-to-search-in-redis-for-hash-keys by cc-by-sa and MIT license