Redis 支持流水线,这涉及向服务器发送多个命令,而无需等待回复,然后在单个步骤中读取回复。当您需要连续发送多个命令(例如将多个元素添加到同一列表)时,流水线可以提高性能。
Spring Data Redis 提供了多种在管道中运行命令的方法。如果不关心流水线操作的结果,则可以使用标准方法,传递参数。这些方法在管道中运行提供的 or 并返回结果,如以下示例所示:RedisTemplate
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 = (StringRedisConnection)connection;
for(int i=0; i< batchSize; i++) {
stringRedisConn.rPop("myqueue");
}
return null;
}
});
前面的示例从管道中的队列中批量右弹出项。
包含所有弹出的项目。 使用其 value、hash key 和 hash value 序列化程序在返回之前反序列化所有结果,因此前面示例中返回的项是 Strings。
还有其他方法可用于传递通过管道传输的结果的自定义序列化程序。results
List
RedisTemplate
executePipelined
请注意,从 返回的值必须为 ,因为此值将被丢弃,以便返回流水线命令的结果。RedisCallback
null
Lettuce 驱动程序支持细粒度刷新控制,允许在命令出现时刷新命令、缓冲命令或在连接关闭时发送命令。
|
Lettuce 驱动程序支持细粒度刷新控制,允许在命令出现时刷新命令、缓冲命令或在连接关闭时发送命令。
|
1 | 在本地缓冲并在每 3 个命令后刷新。 |
流水线仅限于 Redis Standalone。
Redis 集群目前仅通过 Lettuce 驱动程序支持,使用跨时隙键时以下命令除外:、、、
完全支持同插槽密钥。rename renameNX sort bLPop bRPop rPopLPush bRPopLPush info sMove sInter sInterStore sUnion sUnionStore sDiff sDiffStore |
流水线仅限于 Redis Standalone。
Redis 集群目前仅通过 Lettuce 驱动程序支持,使用跨时隙键时以下命令除外:、、、
完全支持同插槽密钥。rename renameNX sort bLPop bRPop rPopLPush bRPopLPush info sMove sInter sInterStore sUnion sUnionStore sDiff sDiffStore |