パイプライン
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 ドライバーは、コマンドが表示されたときにコマンドをフラッシュしたり、バッファリングしたり、接続のクローズ時にコマンドを送信したりできる、きめの細かいフラッシュ制御をサポートしています。
|
パイプラインは Redis スタンドアロンに制限されます。Redis クラスターは現在、クロススロットキーを使用する場合の次のコマンドを除き、Lettuce ドライバーを通じてのみサポートされています: rename 、renameNX 、sort 、bLPop 、bRPop 、rPopLPush 、bRPopLPush 、info 、sMove 、sInter 、sInterStore 、sUnion 、sUnionStore 、sDiff 、sDiffStore 。同一スロットキーは完全にサポートされています。 |