此版本仍在开发中,尚未被视为稳定版本。如需最新的稳定版本,请使用 Spring Data Redis 3.4.0spring-doc.cadn.net.cn

流水线

Redis 支持流水线,这涉及向服务器发送多个命令,而无需等待回复,然后一步读取回复。当你需要连续发送多个命令时,例如将许多元素添加到同一个 List 时,流水线可以提高性能。spring-doc.cadn.net.cn

Spring Data Redis 提供了几个RedisTemplate方法。如果您不关心 pipelined作的结果,可以使用标准的execute方法, 传递true对于pipeline论点。这executePipelined方法运行提供的RedisCallbackSessionCallback并返回结果,如以下示例所示:spring-doc.cadn.net.cn

//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在返回之前使用其 value、hash key 和 hash value 序列化器反序列化所有结果,因此前面示例中返回的项是 Strings。 还有其他executePipelined方法,这些方法允许您为流水线结果传递自定义序列化程序。spring-doc.cadn.net.cn

请注意,从RedisCallback必须是null,因为该值将被丢弃,以便返回 pipelined 命令的结果。spring-doc.cadn.net.cn

Lettuce 驱动程序支持细粒度的 flush 控制,允许在命令出现时刷新命令、缓冲或在连接关闭时发送命令。spring-doc.cadn.net.cn

LettuceConnectionFactory factory = // ...
factory.setPipeliningFlushPolicy(PipeliningFlushPolicy.buffered(3)); (1)
1 在本地缓冲,并在每 3 个命令后刷新。
流水线仅限于 Redis Standalone。 Redis Cluster 目前仅支持通过 Lettuce 驱动程序,但在使用跨槽键时,以下命令除外:rename,renameNX,sort,bLPop,bRPop,rPopLPush,bRPopLPush,info,sMove,sInter,sInterStore,sUnion,sUnionStore,sDiff,sDiffStore. 完全支持相同槽位的密钥。