Redis provides support for transactions through the multi, exec, and discard commands. These operations are available on RedisTemplate, however RedisTemplate is not guaranteed to execute all operations in the transaction using the same connection.
Spring Data Redis provides the SessionCallback interface for use when multiple operations need to be performed with the same connection, as when using Redis transactions. For example:
当使用 redis 的事务的时候, Spring Data Redis 提供 SessionCallback 的接口支持多个操作的执行都在同一个连接中.
2.Pipeline
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 executing commands in a pipeline. If you don't care about the results of the pipelined operations, you can use the standard execute method, passing true for the pipeline argument. The executePipelined methods will execute the provided RedisCallback or SessionCallback in a pipeline and return the results. For example:
Redis 提供 pipelining(管道) 的支持, 它可以发送多条指令到 redis服务端 而不用等待服务端的回复 并且 读取服务端的回复在一步操作中. 当你需要连续发送多条命令的时候 Pipelining(管道) 可以改善性能, such as 添加多个元素到同一个list中.
Spring Data Redis 提供几个 RedisTemplate 的方法支持在一个 pipeline(管道) 中执行多个指令.如果不关注管道操作的结果, 可以使用标准的execute方法, 传递true 的pipeline参数.
executePipelined 方法会执行 RedisCallback or SessionCallback 的回调方法以返回结果.
```
//pop a specified number of items from a queue
List results = stringRedisTemplate.executePipelined(new RedisCallback() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
for(int i=0; i< batchSize; i++) {
stringRedisConn.rPop("myqueue");
}
return null;
}
});