sql >> Database teknologi >  >> NoSQL >> Redis

Sådan rettes Redis-nøgler serialiseret med Java

Hvis du arbejder med Java og bruger Spring, er der en rimelig chance for, at dine nøgler i Redis ser sådan ud

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

Nøgler i Redis kan kun være strenge, men Spring lader dig også gemme java-objekter. Som standard vil Spring konvertere java-objektet ved hjælp af JDK serializer. JDK serializer tilføjer disse \xac\xed... ` bytes.

Rettelsen er normalt en 1-linjes ændring - instruer foråret om at bruge StringRedisSerializer. Men denne ændring påvirker kun nye nøgler. Eksisterende nøgler vil fortsat forblive i Redis, men vil være utilgængelige for java.

Hvis du allerede har data i produktionen, skal du gøre mere. En tilgang er at omdøbe nøgler og slippe af med de binære data.

Omdøb Java-kodede nøgler

Vi har for nylig udgivet et java-script, der automatisk retter sådanne nøgler. Se hashedin/redis-rename-java-encoded-keys.

Den generelle tilgang er:

  1. Scan nøgler, og se efter nøgler, der starter med \xac\xed\x00\x05 - som er signaturen for java-kodede objekter
  2. Prøv at deserialisere til et java-objekt.
  3. Hvis det lykkes, og hvis objektet er af typen String, så omdøb nøglen
  4. Hvis det er en klynge, vil omdøbningsnøgle ikke virke. I så fald skal du dumpe og gendan nøglen under det nye navn

Køre det i produktion

  1. Du skal først foretage kodeændringen for at stoppe med at bruge Jdk Serializer
  2. På dette tidspunkt vil læsning fra redis mislykkes, fordi koden leder efter serialiserede objekter
  3. Begynd nu at køre scriptet for at rette dataene

Fremtidige forbedringer

  1. For at reducere nedetiden kan du scanne databasen og buffere alle omdøbningskommandoer. Foretag derefter kodeændringen og kør straks omdøbningskommandoerne på én gang.
  2. Forbedre klyngeunderstøttelse. I øjeblikket skal du køre mod hver masterknude i klyngen

  1. TypeError:db.collection er ikke en funktion

  2. Kontrollerer om der allerede findes en værdi på en liste Redis

  3. Stop redis server. Hverken nedlukning eller stop virker

  4. Slaget om NoSQL-databaserne - Sammenligning af MongoDB og Cassandra