Pipelining
Redis provides support for pipelining, which involves sending multiple commands to the server without waiting for the replies and then reading the replies in a single step. Pipelining can improve performance when you need to send several commands in a row, such as adding many elements to the same List.
Spring Data Redis provides several RedisTemplate
methods for running commands in a pipeline. If you do not care about the results of the pipelined operations, you can use the standard execute
method, passing true
for the pipeline
argument. The executePipelined
methods run the provided RedisCallback
or SessionCallback
in a pipeline and return the results, as shown in the following example:
//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;
}
});
The preceding example runs a bulk right pop of items from a queue in a pipeline.
The results
List
contains all the popped items. RedisTemplate
uses its value, hash key, and hash value serializers to deserialize all results before returning, so the returned items in the preceding example are Strings.
There are additional executePipelined
methods that let you pass a custom serializer for pipelined results.
Note that the value returned from the RedisCallback
is required to be null
, as this value is discarded in favor of returning the results of the pipelined commands.
The Lettuce driver supports fine-grained flush control that allows to either flush commands as they appear, buffer or send them at connection close.
|
Pipelining is limited to Redis Standalone.
Redis Cluster is currently only supported through the Lettuce driver except for the following commands when using cross-slot keys: rename , renameNX , sort , bLPop , bRPop , rPopLPush , bRPopLPush , info , sMove , sInter , sInterStore , sUnion , sUnionStore , sDiff , sDiffStore .
Same-slot keys are fully supported.
|