It does, at least, according to Lettuce:https://github.com/lettuce-io/lettuce-core/wiki/Pipelining-and-command-flushing
Command flushing is an advanced topic and in most cases (i.e. unless
your use-case is a single-threaded mass import application) you won’t
need it as Lettuce uses pipelining by default.
It means, it uses pipelining by default, I don't think this is true or clear, as it also mentions:
A flush is an expensive system call and impacts performance. Batching,
disabling auto-flushing
The AutoFlushCommands state is set per connection and therefore
affects all threads using the shared connection. If you want to omit
this effect, use dedicated connections. The AutoFlushCommands state
cannot be set on pooled connections by the lettuce connection pooling.
Which means, if you want true Redis pipelining http://redis.io/topics/pipelining, you can do that as well with some extra effort.