Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak naprawić klucze Redis serializowane za pomocą Java?

Jeśli pracujesz z Javą i korzystasz ze Springa, istnieje spora szansa, że ​​Twoje klucze w Redis wyglądają tak

\xac\xed\x00\x05t\x00\x0amyrediskey

Klucze w Redis mogą być tylko ciągami, ale Spring pozwala również przechowywać obiekty java. Domyślnie Spring przekonwertuje obiekt java za pomocą serializatora JDK. Serializator JDK dodaje te \xac\xed... ` bajtów.

Poprawka jest zwykle zmianą jednowierszową — poinstruuj spring, aby używała StringRedisSerializer. Ale ta zmiana dotyczy tylko nowych kluczy. Istniejące klucze pozostaną w Redis, ale będą niedostępne dla Javy.

Jeśli masz już dane w produkcji, musisz zrobić więcej. Jednym ze sposobów jest zmiana nazw kluczy i pozbycie się danych binarnych.

Zmień nazwy kluczy zakodowanych w języku Java

Niedawno wydaliśmy skrypt java, który automatycznie naprawia takie klucze. Zobacz hashedin/redis-rename-java-encoded-keys.

Ogólne podejście to:

  1. Skanuj klucze i szukaj kluczy zaczynających się od \xac\xed\x00\x05 - która jest sygnaturą obiektów zakodowanych w javie
  2. Spróbuj zdeserializować do obiektu java.
  3. Jeśli się powiedzie, a obiekt jest typu String, zmień nazwę klucza
  4. Jeśli jest to klaster, klucz zmiany nazwy nie zadziała. W takim przypadku zrzuć i przywróć klucz pod nową nazwą

Uruchamianie w środowisku produkcyjnym

  1. Najpierw musisz dokonać zmiany kodu, aby przestać używać Jdk Serializer
  2. W tym momencie odczyty z redis zakończą się niepowodzeniem, ponieważ kod szuka zserializowanych obiektów
  3. Teraz zacznij uruchamiać skrypt, aby poprawić dane

Przyszłe ulepszenia

  1. Aby skrócić czas przestoju, możesz skanować bazę danych i buforować wszystkie polecenia zmiany nazwy. Następnie dokonaj zmiany kodu i natychmiast uruchom polecenia zmiany nazwy za jednym razem.
  2. Popraw obsługę klastrów. Obecnie musisz uruchamiać się na każdym węźle głównym w klastrze

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy istnieje sposób na automatyczne wykrywanie nowego adresu IP węzła klastra w klastrze Redis za pomocą sałaty?

  2. Nie znaleziono gniazda modułu lua

  3. Redis jako broker wiadomości

  4. Redis jako baza danych

  5. Masowe wstawianie Redis