springboot Redistemplate的execute和 executePipelined
springboot 的 RedisTemplate 的 execute 和 executePipelined 功能的区别
execute
以下是官网原文:
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:
```
//execute a transaction
List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
public List<Object> execute(RedisOperations operations) throws DataAccessException {
operations.multi();
operations.opsForSet().add("key", "value1");
// This will contain the results of all ops in the transaction
return operations.exec();
}
});
```
翻译下来就是:
Redis 通过multi, exec, discard 操作提供事务支持. RedisTemplate 也同样支持这些操作, 然而 RedisTemplate 不保证在同一个连接中执行事务中的所有操作.
当使用 redis 的事务的时候, Spring Data Redis 提供 SessionCallback 的接口支持多个操作的执行都在同一个连接中.
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(管道) 中执行多个指令.如果不关注管道操作的结果,传递true
的pipeline
参数.
executePipelined 方法会执行 RedisCallback
or 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;
}
});
```
原文:https://www.cnblogs.com/wuhaonan/p/10646277.html