|
此版本仍在开发中,尚未被视为稳定版本。如需使用最新稳定版本,请访问 Spring Data Redis 4.0.4! |
管道化
Redis 提供对管道(pipelining)的支持,该机制允许在不等待服务器回复的情况下连续发送多个命令,然后在单个步骤中读取所有回复。当你需要连续发送多个命令时(例如向同一个列表中添加大量元素),管道可以提升性能。
Spring Data Redis 提供了多个 RedisTemplate 方法用于在管道(pipeline)中执行命令。如果您不关心管道操作的结果,可以使用标准的 execute 方法,并将 true 参数设为 pipeline。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 = new DefaultStringRedisConnection(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。
同槽键已完全支持。 |