Oto, co wymyśliłem. Nie wiem, jak poradzi sobie ze złożonymi połączeniami i co jeszcze może się zepsuć. Tylko nie jedź z tym swoim autonomicznym samochodem...
def new_client(client, **kwargs):
"""return a new Redis client based on an existing one,
with some kwargs modified.
"""
kwargs = {**client.connection_pool.connection_kwargs, **kwargs}
return redis.StrictRedis(**kwargs)
Dzięki temu możemy teraz zrobić m.in.:
client.set(name, pickle.dumps(stuff))
...
# later
with new_client(client, decode_responses=False) as binclient:
data = binclient.get(name)
stuff = pickle.loads(data)