Você usa um pool de conexão global separado para o código do aplicativo. Coloque algo assim no seu inicializador redis.rb:
require 'connection_pool'
REDIS = ConnectionPool.new(size: 10) { Redis.new }
Agora no código do seu aplicativo em qualquer lugar, você pode fazer isso:
REDIS.with do |conn|
# some redis operations
end
Você terá até 10 conexões para compartilhar entre seus funcionários puma/sidekiq. Isso levará a um melhor desempenho, pois, como você observou corretamente, você não terá todos os threads lutando por uma única conexão Redis.
Tudo isso está documentado aqui:https://github.com/mperham/sidekiq/wiki/Advanced-Options#connection-pooling