SpringDataRedis逆シーケンス化異常
922 ワード
需要は1つのインタフェースのアクセス量を統計し、1つのipは1回だけです.
インタフェースアクセス量はもともとそれほど大きくないのでredisの自己付加価値でアクセス数を記録することを考慮し,異なるインタフェースの自己付加価値を1つのhashMapに統一した.
しかし、値の取得時に逆シーケンス化異常が報告されなかった.
資料を調べるとredisTempleのRedisSerializerに問題があることがわかりました.
Springは多くのRedisSerializerの選択を提供し、多くのドキュメントはjackson、JDK、stringの3つしか言及していません.
プロジェクトにはもともとpojoクラスのストレージが多く使われていましたが、デフォルトではJDKRedisSerializerが使われていますが、このシーケンス化方式は付加価値を取ると逆シーケンス化異常が報告されます.
Redisのメモリ値を見ると、redisTemple.opsHashの自己付加価値はJDKRedisSerializerのシーケンス化されていないことがわかりました.私が伝えたint値は、redisに存在するのがint値ですが、取るときにJDKRedisSerializerに必要なのはbyte[]なので、当然異常を報告しました.
ではjacksonで?jsonフォーマットで、速度が速く、体積が小さい.ただし、jacksonはpojoを保存するときに、逆シーケンス化時に正常に変換できるように、コンストラクション関数にjavaTypeを追加する必要があります.
どちらも取捨選択しにくい時、私は偶然一人の大物が自分で書いた逆シーケンス化ツールをめくった.
しかし、springはこのアイデアを吸収し、jacksonを改善し、javaTypeを追加する必要がなく、直接呼び出すことができます.
インタフェースアクセス量はもともとそれほど大きくないのでredisの自己付加価値でアクセス数を記録することを考慮し,異なるインタフェースの自己付加価値を1つのhashMapに統一した.
しかし、値の取得時に逆シーケンス化異常が報告されなかった.
資料を調べるとredisTempleのRedisSerializerに問題があることがわかりました.
Springは多くのRedisSerializerの選択を提供し、多くのドキュメントはjackson、JDK、stringの3つしか言及していません.
プロジェクトにはもともとpojoクラスのストレージが多く使われていましたが、デフォルトではJDKRedisSerializerが使われていますが、このシーケンス化方式は付加価値を取ると逆シーケンス化異常が報告されます.
Redisのメモリ値を見ると、redisTemple.opsHashの自己付加価値はJDKRedisSerializerのシーケンス化されていないことがわかりました.私が伝えたint値は、redisに存在するのがint値ですが、取るときにJDKRedisSerializerに必要なのはbyte[]なので、当然異常を報告しました.
ではjacksonで?jsonフォーマットで、速度が速く、体積が小さい.ただし、jacksonはpojoを保存するときに、逆シーケンス化時に正常に変換できるように、コンストラクション関数にjavaTypeを追加する必要があります.
どちらも取捨選択しにくい時、私は偶然一人の大物が自分で書いた逆シーケンス化ツールをめくった.
GenericJackson2JsonRedisSerializer
しかし、springはこのアイデアを吸収し、jacksonを改善し、javaTypeを追加する必要がなく、直接呼び出すことができます.