Javaを使用してSpringを使用している場合、Redisのキーが次のようになる可能性がかなりあります
\xac\xed\x00\x05t\x00\x0amyrediskey
Redisのキーは文字列のみですが、SpringではJavaオブジェクトも保存できます。デフォルトでは、SpringはJDKシリアライザーを使用してJavaオブジェクトを変換します。 JDKシリアライザーはそれらの\xac\xed...
を追加します `バイト。
修正は通常1行の変更です-StringRedisSerializerを使用するようにSpringに指示します。ただし、この変更は新しいキーにのみ影響します。既存のキーは引き続きRedisに残りますが、Javaにはアクセスできなくなります。
すでに本番環境にデータがある場合は、さらに多くのことを行う必要があります。 1つのアプローチは、キーの名前を変更し、バイナリデータを削除することです。
Javaエンコードキーの名前を変更
最近、このようなキーを自動的に修正するJavaスクリプトをリリースしました。 hashedin/redis-rename-java-encoded-keysを参照してください。
一般的なアプローチは次のとおりです。
- キーをスキャンし、
\xac\xed\x00\x05
で始まるキーを探します -これは、Javaでエンコードされたオブジェクトの署名です - Javaオブジェクトに逆シリアル化してみてください。
- 成功し、オブジェクトのタイプがStringの場合は、キーの名前を変更します
- クラスターの場合、名前変更キーは機能しません。その場合は、新しい名前でキーをダンプして復元します
- Jdk Serializerの使用を停止するには、最初にコードを変更する必要があります
- この時点で、コードはシリアル化されたオブジェクトを探しているため、redisからの読み取りは失敗します
- 次に、スクリプトの実行を開始してデータを修正します
- ダウンタイムを減らすために、データベースをスキャンして、すべての名前変更コマンドをバッファリングできます。次に、コードを変更して、すぐに名前変更コマンドを一度に実行します。
- クラスターのサポートを改善します。現在、クラスター内の各マスターノードに対して実行する必要があります