Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да поправите Redis ключове, сериализирани с Java

Ако работите с Java и използвате Spring, има голяма вероятност вашите ключове в Redis да изглеждат така

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

Ключовете в Redis могат да бъдат само низове, но Spring ви позволява да съхранявате и java обекти. По подразбиране Spring ще конвертира java обекта с помощта на JDK сериализатор. JDK сериализаторът добавя тези \xac\xed... ` байтове.

Корекцията обикновено е промяна в 1 ред - инструктирайте spring да използва StringRedisSerializer. Но тази промяна засяга само новите ключове. Съществуващите ключове ще продължат да останат в Redis, но ще бъдат недостъпни за java.

Ако вече имате данни в производството, трябва да направите повече. Един подход е да преименувате ключове и да се отървете от двоичните данни.

Преименуване на Java кодирани ключове

Наскоро пуснахме java скрипт, който автоматично коригира такива ключове. Вижте hashedin/redis-rename-java-encoded-keys.

Общият подход е:

  1. Сканирайте ключовете и потърсете ключове, започващи с \xac\xed\x00\x05 - което е подписът за java кодирани обекти
  2. Опитайте да десериализирате в java обект.
  3. Ако е успешен и ако обектът е от тип String, преименувайте ключа
  4. Ако е клъстер, ключът за преименуване няма да работи. В такъв случай изхвърлете и възстановете ключа под новото име

Изпълнение в производствения режим

  1. Първо трябва да промените кода, за да спрете да използвате Jdk Serializer
  2. В този момент четенето от redis няма да е успешно, защото кодът търси сериализирани обекти
  3. Сега започнете да изпълнявате скрипта, за да коригирате данните

Бъдещи подобрения

  1. За да намалите времето на престой, можете да сканирате базата данни и да буферирате всички команди за преименуване. След това направете промяната на кода и незабавно изпълнете командите за преименуване наведнъж.
  2. Подобрете поддръжката на клъстери. В момента трябва да работите срещу всеки главен възел в клъстера

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. NodeJS - сигурно свързване с външен Redis сървър

  2. .NET Core инжектиране на singleton услуга в друга singleton услуга

  3. Как списъците на Redis могат да се използват за внедряване на чат система?

  4. как мога да съхранявам Json в redis с hashmap (HSET)

  5. Memcache срещу Java памет