このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Data Redis 4.1.1 を使用してください! |
移行ガイド
このセクションには、移行手順、非推奨、削除に関する詳細が含まれています。
3.x から 4.x へのアップグレード
4.0 に移行する前に、最新の Spring Data Redis 3.5.x リリースにアップグレードし、削除予定の非推奨 API を置き換えてください。
Jackson 3
Spring Data および Redis 4.0 は、主要な JSON ライブラリとして Jackson 3 を使用します。以下にリストされている Jackson 2 の API は、非推奨となり削除予定です。
RedisSerializer.json() は、tools.jackson パッケージに含まれる Jackson 3 を使用するようになりました。tools.jackson.core:jackson-databind と最新バージョンの com.fasterxml.jackson.core:jackson-annotations が必要です。アプリケーションコードの更新方法については、Jackson 3 移行ガイド [GitHub] (英語) を参照してください。
以下の表は、Jackson 3 の代替の一覧です。
| 目的 | Jackson 2 API | Jackson 3 API |
|---|---|---|
汎用 JSON シリアライザー |
|
|
型付き JSON シリアライザー |
|
|
ハッシュマッパー |
|
|
リーダーと執筆者向けのカスタム契約 |
|
|
GenericJackson2JsonRedisSerializer は、PolymorphicTypeValidator を必要とせずにデフォルトでデフォルトの型付けを有効にします。GenericJacksonJsonRedisSerializer は、デフォルトではデフォルトの型付けを有効にしません。デフォルトの型付けが必要な場合は、GenericJacksonJsonRedisSerializer ビルダー (GenericJacksonJsonRedisSerializer.builder().enableDefaultTyping(…)) を介して有効にしてください。 |
移行中に Jackson 2 を引き続き使用する場合は、コンストラクターとビルダー内の JacksonObjectReader を Jackson2ObjectReader に、JacksonObjectWriter を Jackson2ObjectWriter に置き換えてください。
以前は、RedisSerializer.json() は GenericJackson2JsonRedisSerializer を使用していました。Jackson 3 シリアライザは、Jackson 2 の出力とは異なる JSON 出力を生成する可能性があります。これらの値が移行されるまでは、既存の値を読み取るために GenericJackson2JsonRedisSerializer を引き続き使用してください。
RedisSerializer<Object> serializer = new GenericJackson2JsonRedisSerializer();jackson2CompatibilityMode() を使用して、Jackson2HashMapper と互換性のあるハッシュを読み書きします。
JacksonHashMapper mapper = JacksonHashMapper.builder()
.jackson2CompatibilityMode()
.build(); 既存のハッシュ表現に合わせるには、ビルダーで flatten() または hierarchical() を選択してください。
Redis キャッシュ
RedisCacheWriter は、非同期キャッシュの削除とクリアをサポートするために、evict(…) および clear(…) メソッドによって拡張されました。
設定された RedisConnectionFactory が ReactiveRedisConnectionFactory を実装している場合、デフォルトの RedisCacheWriter は put(…)、evict(…)、clear(…) に対して非同期動作を使用します。これらの操作は、呼び出し元のメソッドが戻った後に完了する場合があります。Cache.evictIfPresent(…) または Cache.invalidate(…) を呼び出すと、操作が完了するまで待機してから戻ることで同期動作が強制されます。すべての操作で同期動作を使用するには、RedisCacheWriter ビルダーで immediateWrites() を呼び出します。
RedisCacheWriter cacheWriter = RedisCacheWriter.create(connectionFactory,
configurer -> configurer.immediateWrites());| 3.x API | 4.x 交換 |
|---|---|
|
|
|
|
StringRedisTemplate 接続コールバック
StringRedisTemplate は、コールバックに渡される接続を StringRedisConnection として公開しなくなりました。代わりに StringRedisTemplate の操作を使用してください。
String value = stringRedisTemplate.opsForValue().get("key"); 残りのコールバックについては、バイナリ RedisConnection API を使用してください。
Lettuce 可観測性
Spring Data Redis 4.0 は、Lettuce のネイティブな Micrometer 統合を優先するため、Lettuce オブザーバビリティアダプターを削除します。削除された org.springframework.data.redis.connection.lettuce.observability.LettuceObservationContext の代わりに、Lettuce の io.lettuce.core.tracing.LettuceObservationContext を使用してください。RedisObservation には公開されている代替はありません。MicrometerTracingAdapter を Lettuce の io.lettuce.core.tracing.MicrometerTracing に置き換えてください。
MicrometerTracing tracing = new MicrometerTracing(observationRegistry, "Redis");
ClientResources clientResources = ClientResources.builder()
.tracing(tracing)
.build(); 結果として生成された ClientResources インスタンスを LettuceClientConfiguration 上で構成します。高度な構成オプションについては、Lettuce の Micrometer Tracing ドキュメント (英語) を参照してください。
JSpecify の null 許容性
Spring Data Redis 4.0 は、JSpecify (英語) null 可能性アノテーションを使用して API の null 性を示します。ほとんどのパッケージはデフォルトで null マークされています。特定のパッケージとインターフェースは、戻り値が接続状態に依存するため、null 以外のデフォルト値を宣言できません。トランザクション中またはパイプライン処理中に呼び出されたメソッドは、トランザクションが実行されるかパイプラインが閉じられるまで null を返します。影響を受ける型は @NullUnmarked を使用し、null 以外の契約を保持する引数と戻り値には @NonNull が適用されます。
RedisSerializer.serialize(Object) must now return a non-null byte array. Custom RedisSerializer implementations can use an empty byte array for a null value. RedisSerializer.deserialize(byte[]) can still return null. See the Spring Framework documentation on null-safety for details.
削除および変更されたその他の API
| 3.x API | 4.x 置換またはアクション |
|---|---|
|
|
|
|
|
|
|
|
|
|
| 呼び出し元を再コンパイルしてください。このメソッドはプリミティブ型 |
| 呼び出し元を再コンパイルしてください。メソッドはプリミティブ型 |
| 入力コレクションをそのまま使用するか、必要に応じて |
|
|
|
|
| 3.x API | 4.x 置換またはアクション |
|---|---|
|
|
|
|
|
|
|
|
2.x から 3.x へのアップグレード
削除 / 削除された型
| タイプ | 置換文字列 |
|---|---|
o.s.d.redis.Version | o.s.d.util.Version |
o.s.d.redis.VersionParser | - |
o.s.d.redis.connection.RedisZSetCommands.Aggregate | o.s.d.redis.connection.zset.Aggregate |
o.s.d.redis.connection.RedisZSetCommands.Tuple | o.s.d.redis.connection.zset.Tuple |
o.s.d.redis.connection.RedisZSetCommands.Weights | o.s.d.redis.connection.zset.Weights |
o.s.d.redis.connection.RedisZSetCommands.Range | o.s.d.domain.Range |
o.s.d.redis.connection.RedisZSetCommands.Limit | o.s.d.redis.connection.Limit.java |
o.s.d.redis.connection.jedis.JedisUtils | - |
o.s.d.redis.connection.jedis.JedisVersionUtil | - |
o.s.d.redis.core.convert.CustomConversions | o.s.d.convert.CustomConversions |
変更されたメソッドと型
| タイプ | メソッド | 置換文字列 |
|---|---|---|
o.s.d.redis.core.Cursor | 開く | - |
o.s.d.redis.core.RedisTemplate | 実行する | doWithKeys |
o.s.d.redis.stream.StreamMessageListenerContainer | isAutoAck | isAutoAcknowledge |
o.s.d.redis.stream.StreamMessageListenerContainer | autoAck | autoAcknowledge |
| タイプ | メソッド | 置換文字列 |
|---|---|---|
o.s.d.redis.connection.ClusterCommandExecutionFailureException | getCauses | getSuppressed |
o.s.d.redis.connection.RedisConnection | bgWriteAof | bgReWriteAof |
o.s.d.redis.connection.RedisConnection | slaveOf | replicaOf |
o.s.d.redis.connection.RedisConnection | slaveOfNoOne | ReplicaOfNoOne |
o.s.d.redis.connection.ReactiveClusterCommands | clusterGetSlaves | clusterGetReplicas |
o.s.d.redis.connection.ReactiveClusterCommands | clusterGetMasterSlaveMap | clusterGetMasterReplicaMap |
o.s.d.redis.connection.ReactiveKeyCommands | getNewName | getNewKey |
o.s.d.redis.connection.RedisClusterNode.Flag | SLAVE | REPLICA |
o.s.d.redis.connection.RedisClusterNode.Builder | slaveOf | replicaOf |
o.s.d.redis.connection.RedisNode | isSlave | isReplica |
o.s.d.redis.connection.RedisSentinelCommands | 奴隷 | レプリカ |
o.s.d.redis.connection.RedisServer | getNumberSlaves | getNumberReplicas |
o.s.d.redis.connection.RedisServerCommands | slaveOf | replicaOf |
o.s.d.redis.core.ClusterOperations | getSlaves | getReplicas |
o.s.d.redis.core.RedisOperations | slaveOf | replicaOf |
| タイプ | メソッド | 置換文字列 |
|---|---|---|
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoAdd | 追加 |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoDist | 距離 |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoHash | ハッシュ |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoPos | 位置 |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoRadius | 半径 |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoRadiusByMember | 半径 |
o.s.d.redis.core.GeoOperations & BoundGeoOperations | geoRemove | 除去 |
| タイプ | メソッド | 置換文字列 |
|---|---|---|
o.s.d.redis.cache.RedisCacheConfiguration | prefixKeysWith | prefixCacheNameWith |
o.s.d.redis.cache.RedisCacheConfiguration | getKeyPrefix | getKeyPrefixFor |
Jedis
重要なドライバーの変更について説明している Jedis アップグレードガイド [GitHub] (英語) を参照してください。
| タイプ | メソッド | 置換文字列 |
|---|---|---|
o.s.d.redis.connection.jedis.JedisConnectionFactory | getShardInfo | JedisClientConfiguration から入手できます |
o.s.d.redis.connection.jedis.JedisConnectionFactory | setShardInfo | JedisClientConfiguration で設定できます |
o.s.d.redis.connection.jedis.JedisConnectionFactory | createCluster |
|
o.s.d.redis.connection.jedis.JedisConverters | パッケージの可視性があります | |
o.s.d.redis.connection.jedis.JedisConverters | tuplesToTuples | - |
o.s.d.redis.connection.jedis.JedisConverters | tuplesToTuples | - |
o.s.d.redis.connection.jedis.JedisConverters | stringListToByteList | - |
o.s.d.redis.connection.jedis.JedisConverters | stringSetToByteSet | - |
o.s.d.redis.connection.jedis.JedisConverters | stringMapToByteMap | - |
o.s.d.redis.connection.jedis.JedisConverters | tupleSetToTupleSet | - |
o.s.d.redis.connection.jedis.JedisConverters | toTupleSet | - |
o.s.d.redis.connection.jedis.JedisConverters | toDataAccessException | o.s.d.redis.connection.jedis.JedisExceptionConverter#convert |
トランザクション / パイプライン
パイプライン処理とトランザクションは相互に排他的になりました。パイプライン / トランザクションモードでサーバーまたは接続コマンドを使用することはできなくなりました。
Lettuce
Lettuce プール
LettucePool とその実装 DefaultLettucePool は、置き換えなしで削除されました。ドライバーのネイティブプーリング機能については、ドライバーのドキュメント (英語) を参照してください。プーリングパラメーターを受け入れるメソッドが更新されました。これは、LettuceConnectionFactory および LettuceConnection のメソッドに影響します。
Lettuce 認証
AuthenticatingRedisClient は交換せずに削除されました。認証データを設定するには、RedisURI のドライバのドキュメント (英語) を参照してください。