2012-01-16 9 views
8

Coś, co pojawia się cały czas w naszym zestawie danych w pracy, wymaga zapytania o kilka wartości z podanymi zakresami kluczy. Zakresy dat są oczywistym przykładem.Uzyskaj gamę kluczy z redisem?

wiem, można użyć znaczników czasu Uniksa i posortowaną zestaw do zapytań o zakresy dat, ale wydaje się irytujące, bo musiałbym albo

  1. umieścić cały dokument jako wartość w posortowanej zestawie lub
  2. po prostu wpisz w nim ids, a następnie poproś o polecenie redis dla każdego klawisza.

Być może opcja 2 jest standardowa? Czy istnieje sposób, aby poprosić redis o kilka kluczy jednocześnie? Jak zapytanie mongody $? A może prośba o kilka kluczy w rurociągu jest równie szybka?

+0

opcja 2 jest standardem. istnieje MGET dla wielu kluczy. http://redis.io/topics/twitter-clone –

Odpowiedz

6

Opcje 2, posadź Ids w posortowany zestaw, a następnie użyj mget, aby uzyskać wartości, jeśli twoje klucze są hashem, musisz wydać wiele hget, ale zaletą jest to, że możesz wyciągnąć określone części obiektu, które faktycznie potrzebuję zamiast wszystkiego. Jest bardzo szybki w praktyce.

+0

Interesujące. Wyobrażam sobie, że chcesz też użyć potoku? Możliwe, że będę chciał regularnie wyciągać 100 wartości w ten sposób. Wygląda na to, że jest to możliwe również przy SORTOWANIU, prawda? Czy jest wolniej? –

+1

W zależności od używanego języka/biblioteki zwykle jest wbudowana funkcja pipelining, na przykład dla node.js node_redis zrobi to za Ciebie bez dodatkowego wysiłku. Możesz również użyć tej sztuczki, ale nie jestem pewien, czy jest ona rzeczywiście szybsza w jakikolwiek mierzalny sposób. Chciałbym zobaczyć kilka punktów odniesienia dla niego. –

+0

Powinieneś używać potokowania, zmierzyłem jego wydajność i jest to około 5 razy szybsze działanie z kluczami 10k, wyniki na moim blogu http://blog.jmoz.co.uk/python-redis-py-pipeline – jmoz

1

Może trochę magii bash pomaga?

echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli 

wyjście to dane z wszystkich przycisków, które rozpoczynają się YOURKEY

+4

** Ważne Uwaga: ** Polecenie 'KEYS' blokuje i może zająć dużo czasu, jeśli masz dużo danych. W ten sposób można usunąć serwery/aplikacje. – ceejayoz