【Redis】コード文字化け問題

問題の説明:

RedisTemplate を使用して保存されたデータを redis-cli クライアントで表示すると、キーと値には \xac\xad\ のような文字列が含まれます。

理由:

jdk シリアル化メソッドがデフォルトで使用されるためです。サポートされているシリアル化方法は次のとおりです

プロジェクトには通常キャッシュがあり、キャッシュへのアクセスには Redis がよく使用されます (セッション ストレージ キャッシュは推奨されなくなりました)。キーと値は Spring が提供する Serializer を通じてデータベースにシリアル化されます。RedisTemplate はデフォルトで JdkSerializationRedisSerializer を使用し、StringRedisTemplate はデフォルトで StringRedisSerializer を使用します。

ここに画像の説明を挿入します

解決:

システム起動後、キャッシュシリアライザを初期化します。JdkSerializationRedisSerializer を使用して redisTemplate のデフォルトのシリアル化を stringRedis シリアル化に変更します。

ここに画像の説明を挿入します

キーと値は両方とも文字列を使用してシリアル化されます。

ここに画像の説明を挿入します

注記:

1. ApplicationRunner インターフェイスは、springboot アプリケーションの開始後にいくつかの初期化操作を実装できます。

2. シリアライザーを使用する理由

Redis はデータをキーと値の形式でメモリに保存するため、キーは単純な文字列です。キーの長さに制限はないようですが、原則として、キーはできるだけ短く、読みやすいものである必要があります。永続ストレージに基づいている場合、サービス内のキーはライフサイクル全体を通じてメモリ内に存在するため、キーのサイズを小さくするとメモリが効果的に節約され、キーの取得効率も最適化されます。
   Redis では、値のストレージ レベルは引き続き string に基づいています。論理レベルでは、string/set/list/map になります。ただし、パフォーマンス上の理由から、redis は異なる "エンコーディング" データ構造タイプを使用してそれらを表現します。(例: リンクリスト、ジップリストなど)。
   したがって、redis はデータを格納するときに、データを byte[] 配列の形式に変換し、データにアクセスするときにデータ形式を変換する必要があるため、シリアル化と逆シリアル化が使用されることが理解できます。シリアライザーを構成する必要があります。

参考リンク: https://blog.csdn.net/u010096624/article/details/109046714
ソースコードのトレーサビリティ: https://blog.csdn.net/qq_16159433/article/details/121491555
マルチメソッド実装: https://ブログ.csdn.net/m4330187/article/details/108091447

おすすめ

転載: blog.csdn.net/m0_46459413/article/details/132044448