Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Cara Memperbaiki Kunci Redis yang Diserialisasi Dengan Java

Jika Anda bekerja dengan Java dan menggunakan Spring, ada kemungkinan besar kunci Anda di Redis terlihat seperti ini

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

Kunci dalam Redis hanya dapat berupa String, tetapi Spring memungkinkan Anda menyimpan objek Java juga. Secara default, Spring akan mengonversi objek java menggunakan serializer JDK. Serializer JDK menambahkan \xac\xed... ` byte.

Perbaikan biasanya berupa perubahan 1 baris - instruksikan pegas untuk menggunakan StringRedisSerializer. Tapi perubahan ini hanya mempengaruhi kunci baru. Kunci yang ada akan tetap berada di Redis tetapi tidak dapat diakses oleh java.

Jika Anda sudah memiliki data dalam produksi, Anda perlu berbuat lebih banyak. Salah satu pendekatannya adalah mengganti nama kunci dan membuang data biner.

Ganti Nama Kunci Java yang Disandikan

Kami baru-baru ini merilis skrip java yang secara otomatis memperbaiki kunci tersebut. Lihat hashedin/redis-rename-java-encoded-keys.

Pendekatan umumnya adalah:

  1. Pindai kunci, dan cari kunci yang dimulai dengan \xac\xed\x00\x05 - yang merupakan tanda tangan untuk objek yang disandikan java
  2. Coba deserialize menjadi objek java.
  3. Jika berhasil, dan jika objek bertipe String, maka ganti nama kuncinya
  4. Jika ini adalah sebuah cluster, rename key tidak akan berfungsi. Dalam hal ini, buang dan pulihkan kunci dengan nama baru

Menjalankannya di Produksi

  1. Anda harus mengubah kode terlebih dahulu untuk berhenti menggunakan Jdk Serializer
  2. Pada titik ini, pembacaan dari redis akan gagal, karena kode mencari objek berseri
  3. Sekarang mulai jalankan skrip untuk memperbaiki data

Peningkatan di Masa Depan

  1. Untuk mengurangi waktu henti, Anda dapat memindai database dan buffer semua perintah rename. Kemudian buat perubahan kode dan segera jalankan perintah rename sekaligus.
  2. Tingkatkan dukungan cluster. Saat ini, Anda harus menjalankan setiap node master di cluster

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Berikan file ke Pekerjaan Aktif / pekerjaan latar belakang

  2. Apakah Action Cable 5 memerlukan Redis?

  3. Pro dan kontra untuk menggunakan Seledri vs. RQ

  4. Rel lingkungan kustom Resque.enqueue tidak menciptakan pekerjaan

  5. Bagaimana cara mendapatkan kunci dari nilai dalam pasangan kunci/nilai di klien toko redis?