You are missing a few things:
* The default connection pool does not really support sharding. You need to subclass redis.ConnectionPool to either take a shard_hint argument, or to do its calculations internally on the passed "keys" argument. (I don't know if it's documented)
* When you do subclass it, you're going to need to be careful with managing your different connections to the different shards, as none of that is built for you
* By default, connections aren't actually created until you need them
* If you think that you're going to be able to detect when a Redis connection dies so as to do multi-machine concurrent writes, you're going to have a bad time[1]
[1] Multi-machine commit is a PITA to get right (made worse by Redis' inability to rollback partial changes). Heck, I'm not sure that I could get it right the first time without spending several hours reading articles before starting.
Regards,
- Josiah