このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、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 APIJackson 3 API

汎用 JSON シリアライザー

GenericJackson2JsonRedisSerializer

GenericJacksonJsonRedisSerializer

型付き JSON シリアライザー

Jackson2JsonRedisSerializer

JacksonJsonRedisSerializer

ハッシュマッパー

Jackson2HashMapper

JacksonHashMapper

リーダーと執筆者向けのカスタム契約

Jackson2ObjectReader and Jackson2ObjectWriter

JacksonObjectReader and JacksonObjectWriter

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());
表 1: キャッシュ API の変更点
3.x API4.x 交換

RedisCacheConfiguration.getTtl()

RedisCacheConfiguration.getTtlFunction().getTimeToLive(key, value)

RedisCacheManager(RedisCacheWriter, RedisCacheConfiguration, Map, boolean)

RedisCacheManager(RedisCacheWriter, RedisCacheConfiguration, boolean, Map)

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

表 2: 構成、操作、ユーティリティ
3.x API4.x 置換またはアクション

new RedisClusterConfiguration(PropertySource)

RedisClusterConfiguration.of(PropertySource)

new RedisSentinelConfiguration(PropertySource)

RedisSentinelConfiguration.of(PropertySource)

BoundSetOperations.diff(…)

BoundSetOperations.difference(…)

BoundZSetOperations, ZSetOperations, and RedisZSet overloads accepting RedisZSetCommands.Range

org.springframework.data.domain.Range<String> を受け入れるオーバーロードを使用してください。

RedisPersistentEntity.hasExplictTimeToLiveProperty()

RedisPersistentEntity.hasExplicitTimeToLiveProperty()

Converters.toBoolean(Long) returning Boolean

呼び出し元を再コンパイルしてください。このメソッドはプリミティブ型 boolean を返すようになりました。

Converters.toTimeMillis(…) returning Long

呼び出し元を再コンパイルしてください。メソッドはプリミティブ型 long を返すようになりました。

LettuceConverters.toBytesList(Collection<byte[]>)

入力コレクションをそのまま使用するか、必要に応じて List 形式に変換してください。

ByteUtils.extractBytes(ByteBuffer)

ByteUtils.getBytes(ByteBuffer)

RedisAssertions

org.springframework.util.Assert を使用するか、明示的なチェックを行ってください。

表 3: 拡張 API
3.x API4.x 置換またはアクション

new ScanIteration(long, Collection) and ScanIteration.getCursorId()

new ScanIteration(Cursor.CursorId, Collection) と ScanIteration.getId() を使用してください。

ScanCursor.doOpen(long) and ScanCursor.isFinished(long)

Cursor.CursorId を受け入れるバリアントを上書きします。

RedisPartTreeQuery constructor accepting QueryMethodEvaluationContextProvider

ValueExpressionDelegate を受け入れるコンストラクターを使用してください。

JedisClusterTopologyProvider.shouldUseCachedValue()

shouldUseCachedValue(JedisClusterTopology) を上書きします。

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

変更されたメソッドと型

表 4: コア
タイプ メソッド 置換文字列

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

表 5: Redis 接続
タイプ メソッド 置換文字列

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

表 6: Redis オペレーション
タイプ メソッド 置換文字列

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

除去

表 7: Redis キャッシュ
タイプ メソッド 置換文字列

o.s.d.redis.cache.RedisCacheConfiguration

prefixKeysWith

prefixCacheNameWith

o.s.d.redis.cache.RedisCacheConfiguration

getKeyPrefix

getKeyPrefixFor

Jedis

重要なドライバーの変更について説明している Jedis アップグレードガイド [GitHub] (英語) を参照してください。

表 8: ジェダイ Redis 接続
タイプ メソッド 置換文字列

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

Jedis インスタンスの代わりに Connection が必要になりました

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 のドライバのドキュメント (英語) を参照してください。