Pipelining
Redis 提供了对 pipelining 的支持,其中涉及向服务器发送多个命令而不等待回复,然后在单步中读取回复。当您需要连续发送多个命令时(例如将许多元素添加到同一个列表中),管道处理可以提高性能。
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 驱动程序支持细粒度的刷新控制,它允许在命令出现时刷新命令,缓冲或在连接关闭时发送命令。
|