sql >> Databasteknik >  >> NoSQL >> Redis

Hur man fixar Redis-nycklar som serialiserats med Java

Om du arbetar med Java och använder Spring, finns det en rimlig chans att dina nycklar i Redis ser ut så här

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

Nycklar i Redis kan bara vara strängar, men Spring låter dig lagra java-objekt också. Som standard kommer Spring att konvertera java-objektet med JDK serializer. JDK serializer lägger till dessa \xac\xed... ` bytes.

Fixeringen är vanligtvis en 1-rads förändring - instruera våren att använda StringRedisSerializer. Men denna förändring påverkar bara nya nycklar. Befintliga nycklar kommer att fortsätta att finnas kvar i Redis men kommer att vara otillgängliga för java.

Om du redan har data i produktionen måste du göra mer. Ett tillvägagångssätt är att byta namn på nycklar och bli av med binära data.

Byt namn på Java-kodade nycklar

Vi släppte nyligen ett java-skript som automatiskt fixar sådana nycklar. Se hashedin/redis-rename-java-encoded-keys.

Det allmänna tillvägagångssättet är:

  1. Skanna nycklar och leta efter nycklar som börjar med \xac\xed\x00\x05 - som är signaturen för java-kodade objekt
  2. Försök att deserialisera till ett java-objekt.
  3. Om det lyckas och om objektet är av typen String, byt namn på nyckeln
  4. Om det är ett kluster fungerar inte byta namn på nyckeln. I så fall, dumpa och återställa nyckeln under det nya namnet

Köra den i produktion

  1. Du måste först göra kodändringen för att sluta använda Jdk Serializer
  2. Vid denna tidpunkt kommer läsning från redis att misslyckas, eftersom koden letar efter serialiserade objekt
  3. Börja nu köra skriptet för att korrigera data

Framtida förbättringar

  1. För att minska driftstopp kan du skanna databasen och buffra alla kommandon för att ändra namn. Gör sedan kodändringen och kör omedelbart namnbytningskommandona på en gång.
  2. Förbättra klusterstödet. För närvarande måste du köra mot varje huvudnod i klustret

  1. Låsning och Redis

  2. MongoDB findAndModify()

  3. CDH 6.2 Release:Vad är nytt i HBase

  4. Problem med Redis install cc:Kommandot hittades inte