sql >> Databáze >  >> NoSQL >> Redis

Jak opravit klíče Redis serializované pomocí Java

Pokud pracujete s Javou a používáte Spring, je velká šance, že vaše klíče v Redis vypadají takto

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

Klíče v Redis mohou být pouze řetězce, ale Spring umožňuje ukládat i java objekty. Ve výchozím nastavení Spring převede objekt java pomocí serializátoru JDK. Serializátor JDK přidá tyto \xac\xed... ` bajtů.

Oprava je obvykle jednořádková změna - instruujte jaro, aby použila StringRedisSerializer. Tato změna se však týká pouze nových klíčů. Stávající klíče zůstanou v Redis i nadále, ale nebudou přístupné pro java.

Pokud již máte data ve výrobě, musíte udělat více. Jedním z přístupů je přejmenovat klíče a zbavit se binárních dat.

Přejmenovat kódované klíče Java

Nedávno jsme vydali java skript, který takové klíče automaticky opravuje. Viz hashedin/redis-rename-java-encoded-keys.

Obecný přístup je:

  1. Naskenujte klíče a vyhledejte klíče začínající na \xac\xed\x00\x05 - což je podpis pro objekty kódované v jazyce Java
  2. Zkuste deserializaci na objekt Java.
  3. Pokud bude úspěšný a je-li objekt typu String, přejmenujte klíč
  4. Pokud se jedná o cluster, přejmenování klíče nebude fungovat. V takovém případě vypište a obnovte klíč pod novým názvem

Spuštění v produkci

  1. Nejprve musíte provést změnu kódu, abyste přestali používat Jdk Serializer
  2. V tomto okamžiku čtení z redis selže, protože kód hledá serializované objekty
  3. Nyní spusťte skript pro opravu dat

Budoucí vylepšení

  1. Chcete-li zkrátit prostoje, můžete prohledat databázi a uložit do vyrovnávací paměti všechny příkazy pro přejmenování. Poté proveďte změnu kódu a okamžitě spusťte příkazy pro přejmenování najednou.
  2. Zlepšete podporu clusteru. Aktuálně musíte běžet proti každému hlavnímu uzlu v clusteru

  1. Nainstalujte CouchDB na Debian 9

  2. Databáze klíčů a hodnot s klientem Java

  3. Jak použít podmínku 'OR' v příkazu redis keys

  4. Node.js – čeká na několik asynchronních volání