2015-03-09 24 views
6

Byłoby wspaniale, gdyby ktoś mógł zasugerować mi, jaki byłby najlepszy sposób przechowywania listy obiektów java w Redis.Najlepszy sposób na przechowywanie listy obiektów java w Redis

Obecnie konwertuję obiekty java na ciągi json i przechowuję te ciągi w Redis i mam zestaw w Redis, aby śledzić wszystkie te.

Dla np: -

SET student:1 '{"name":"testOne","stream":computer science}' 
SET student:2 '{"name":"testTwo","stream":electronics}' 
SADD students 1 
SADD students 2 

Więc jeśli kiedykolwiek chcesz pobrać z listy studentów, najpierw dostać zestaw students a następnie iteracyjne nad nim i uzyskać ciągów json w tych kluczy.

Zastanawiasz się, czy istnieje jakikolwiek inny lepszy sposób radzenia sobie ze scenariuszem przechowywania listy obiektów java w Redis.

(używam Redis jako cache)

Odpowiedz

6

Jeśli nie trzeba zapytań do obiektów java zapisanych w REDiS (indeksacji, wyniki ...), a następnie można tylko szeregować je do ByteArray z biblioteką (na przykład Kryo) i przechowuj je w Stringu w redis . Zauważ, że możesz serializować całą kolekcję obiektów java w jednym ciągu redis, po prostu zapamiętaj, która klasa jest (typ kolekcji + typ obiektu), kiedy chcesz deserializować, możesz na przykład zdefiniować sprytną nazwę klucza dla tego celu.

JSON po prostu użyje więcej miejsca i będzie bardziej intensywny w sieci niż inne formaty sortowania binarnego, jeśli nie potrzebujesz zapytań lub danych czytelnych dla człowieka w redis, to jest w porządku (i bardziej wydajnym) do przechowywania danych binarnych w redis.

Pamiętaj, że jeśli używasz biblioteki jedis (tak jak to oznaczałeś), masz metody na Jedis, które pobierają ciągi bajtów jako parametry zamiast łańcuchów Java w celu wysłania danych jako C-String do Redis (brak utraty danych w procesie).

3

Redis jest czymś więcej niż zwykłą sklepie wartości klucza. Można używać skrótów do przechowywania danych strukturalnych w REDiS

HMSET Uczeń: 1 Nazwa „TestOne” strumień „informatyka” http://redis.io/commands/hmset

uzyskać wszystkie treści studenta hash wezwanie HGETALL: 1
można również dostać pojedyncze wartości mieszań z HGET
Przykład HGET uczeń: 1 Nazwa

+0

Właściwie to zamierzam przechowywać listę obiektów java i odzyskiwać je, kiedy tylko zajdzie taka potrzeba. Również chciałem zminimalizować liczbę zapytań do pobrania listy, więc zdecydowałem się użyć ciągów json do przechowywania obiektów, co pozwala mi używać MGET i uzyskać wszystkie klucze za jednym razem. Jeśli używam skrótów do przechowywania moich obiektów java, nie mogę uzyskać wszystkich elementów listy obiektów java za jednym zamachem. –

+0

Jeśli chcesz przechowywać je niezamówione, możesz użyć klawisza SET, aby zapisać klucze skrótu. Możesz użyć skryptu LUA, aby pobrać je jednym ruchem. Problem z twoim podejściem: - Aktualizuj i usuń po prostu na stronie klienta. -> złe wsparcie dla wielu użytkowników – Lugg

1

Możesz to łatwo zrobić za pomocą Redisson. Jest to framework oparty na platformie Redis dla Javy, który obsługuje wiele popularnych kodeków (Jackson JSON, Avro, Smile, CBOR, MsgPack, Kryo, FST, LZ4, Snappy i Serializacja JDK) oraz tryby połączenia Redis, takie jak Cluster, Sentinel, AWS Elasticache.

Oto przykład jak przechowywać obiekt Java do listy:

RList<SomeObject> list = redisson.getList("anyList"); 
list.add(new SomeObject(1)); 
list.add(new SomeObject(2)); 

RList interfejs implementuje również java.util.List interfejs. Całkiem proste, prawda?

Powiązane problemy