I have the timeout set to 10 seconds which certainly helps, I think the issue is how gunicorn/gevent handle web requests. I think each request spawns a new redis connection, and as far as I can see there is no global pool I can use :(
On heroku you are limited to 20 connections in the free tier, and it quickly gets expensive.