最新の安定バージョンについては、Spring Data Redis 3.5.4 を使用してください! |
パイプライン
Redis は、パイプライン化 (英語) のサポートを提供します。これには、応答を待たずにサーバーに複数のコマンドを送信し、単一のステップで応答を読み取ることが含まれます。パイプライン処理は、同じリストに多くの要素を追加するなど、複数のコマンドを連続して送信する必要がある場合にパフォーマンスを向上させることができます。
Spring Data Redis は、パイプラインでコマンドを実行するためのいくつかの RedisTemplate
メソッドを提供します。パイプライン操作の結果を気にしない場合は、標準の execute
メソッドを使用して、pipeline
引数に true
を渡すことができます。次の例に示すように、executePipelined
メソッドは、提供された RedisCallback
または SessionCallback
をパイプラインで実行し、結果を返します。
//pop a specified number of items from a queue
List<Object> results = stringRedisTemplate.executePipelined(
new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
for(int i=0; i< batchSize; i++) {
stringRedisConn.rPop("myqueue");
}
return null;
}
});
前の例では、パイプラインのキューからアイテムの一括右ポップを実行します。results
List
には、ポップされたすべてのアイテムが含まれています。RedisTemplate
は、値、ハッシュキー、ハッシュ値シリアライザーを使用して、返される前にすべての結果を逆直列化するため、前の例で返される項目は文字列です。パイプライン化された結果のカスタムシリアライザーを渡すことができる追加の executePipelined
メソッドがあります。
パイプライン化されたコマンドの結果を返すためにこの値は破棄されるため、RedisCallback
から返される値は null
である必要があることに注意してください。
Lettuce ドライバーは、コマンドが表示されたときにコマンドをフラッシュしたり、バッファリングしたり、接続のクローズ時にコマンドを送信したりできる、きめの細かいフラッシュ制御をサポートしています。
|