2014-01-22 4 views
0

설명하기가 매우 복잡합니다.REDIS : "필드"아래에있는 모든 것을 확인하십시오.

내가 원하는 것은 매개 변수로 필드를 사용하고이 필드에 모든 키와 값을 표시하는 명령을 사용하는 것입니다.

나는 REDIS 문서를 둘러보고 HGETALL과 HMGET을 찾았지만이 두 명령은 내 필요를 충족시키지 못합니다.

HGETALL은 키의 매개 변수를 요청하고 값이있는 모든 필드를 표시합니다. 여기의 예 : http://redis.io/commands/hgetall

HMGET은 키와 필드에 첨부 된 매개 변수를 가져 와서 값을 표시합니다. 여기의 예 : http://redis.io/commands/hmget

HKEYS도 있지만, 내가 원하는 것을 제공하지 못합니다.

아주 정확한 명령이 없다면, 나는 내가 할 수있는 것과 가까운 곳에 뭔가를 제공 할 수 있도록 코딩 할 수있는 방법을 알고 싶다.

미리 답변 해 주셔서 감사합니다.

+0

당신은 많은 해시에서 특정 필드를 가져하려고 :

def index @counters = Counter.all end 

내가 그런 식으로이 코드를 교체하려면? –

+0

예, 특정 필드의 모든 데이터 (키 및 값)를 가져 오려고합니다. 그래서 많은 해시에서. – Matarela

답변

1

잘 이해하면 해시가 여러 개 있고 각 키마다 고유 한 키가 있습니다. 그런 다음이 해시에 필드 "name"과 같은 필드가 있습니다. 이제 "name 속성을 저장 한 키와 값이 무엇인지 말해주세요"

그런 경우라면 redis에서 수행 할 수있는 몇 가지 옵션이 있지만 그렇지 않을 수 있습니다. 정보를 저장하는 가장 좋은 방법.

가능한 방법은 필드 이름을 저장할 모든 키에 공통 패턴을 사용하는 것입니다. 예를 들어 "record : a", "record : b"... 그러면 KEYS 레코드와 같은 KEYS 명령을 내릴 수 있습니다. 그러면 해시를위한 모든 키를 얻을 수 있습니다. (SCAN이 더 효율적입니다)

다음은 hget key, name과 같은 몇 가지 명령을 실행해야합니다. MULTI를 사용하면 모든 명령이 동시에 실행됩니다.

이 과정을 통해 첫 번째 단계의 모든 키와 두 번째 단계의 모든 값을 얻을 수 있습니다. 그러나 나는 이것이 최적이라고 생각하지 않는다.

내가 사용 사례를 알았다면, 어쩌면 내가 더

+0

'KEYS' 명령을 생산에 사용하지 말아야합니다. –

+0

그렇기 때문에 제가 썼습니다 (SCAN이 더 효율적이라는 것입니다). 물론 당신이 redis 2.8 이상을 사용하는 경우에만. –

+0

SCAN은 더 효율적이지 않지만 점진적입니다. 오랫동안 Redis 인스턴스를 차단하지 않습니다. 어쨌든, 일반적으로 스캐닝 키를 기반으로 한 솔루션을 배제 할 것입니다. OP가 필드의 데이터에 빠르게 액세스해야하는 경우 명시적인 색인이 필요합니다. –

0

난 당신이 이해하고 있다고 생각하지만 난 영어 아니에요 내가 웹 사이트에 번역해도 (구글 번역) 내가하지 않은 도움을 줄 수 모두 당신의 대답을 이해합니다. 죄송합니다.

나는 KEYS로 시도했다. 내 해시에 사용 된 필드 목록이 있습니다. 나는 아이디어를 가지고있다. 그것은 bla=KEYS * 일을하고, blas.each do |bla|을하고 각각의 ... do, bla = hget (..., 'bla')을한다. 또는 이와 비슷한 것입니다. 하지만 그건 불가능합니다. 열쇠가 없습니다.

Infact Ruby on Rails scaffold의 Redis에서 sqlite3을 대체하려고합니다. 인덱스에 해시의 모든 값이 표시되는 것은 컨트롤러에 있습니다.

더 명확하게하려면 :

def index 
    @counters = REDIS.hget 

    end 
+0

아무도 도와 줄 수 없습니까? – Matarela

관련 문제