Geralmente, é uma ideia errada colocar dados relacionados em diferentes bancos de dados Redis. Quase não há benefício em relação à definição de namespaces por convenções de nomenclatura de chave (sem granularidade extra em relação à segurança, persistência, gerenciamento de expiração, etc ...). E uma grande desvantagem é que os clientes precisam manipular manualmente a seleção do banco de dados correto, o que é propenso a erros para clientes que visam vários bancos de dados ao mesmo tempo.
Agora, se você ainda quiser usar vários bancos de dados, existe uma maneira de fazê-lo funcionar com redis-py e scripts Lua.
redis-py não define um wrapper para o comando SELECT (normalmente usado para alternar o banco de dados atual), devido à implementação do pool de conexão thread-safe subjacente. Mas nada impede que você chame SELECT de um script Lua.
Considere o seguinte exemplo:
$ redis-cli
SELECT 0
SET mykey db0
SELECT 1
SET mykey db1
O script a seguir exibe o valor de mykey nos 2 bancos de dados da mesma conexão de cliente.
import redis
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)
lua1 = """
redis.call("select", ARGV[1])
return redis.call("get",KEYS[1])
"""
script1 = r.register_script(lua1)
lua2 = """
redis.call("select", ARGV[1])
local ret = redis.call("get",KEYS[1])
redis.call("select", ARGV[2])
return ret
"""
script2 = r.register_script(lua2)
print r.get("mykey")
print script2( keys=["mykey"], args = [1,0] )
print r.get("mykey"), "ok"
print
print r.get("mykey")
print script1( keys=["mykey"], args = [1] )
print r.get("mykey"), "misleading !!!"
O script lua1 é ingênuo:ele apenas seleciona um dado banco de dados antes de retornar o valor. Seu uso é enganoso, pois após sua execução, o banco de dados atual associado à conexão foi alterado. Não faça isso.
O script lua2 é muito melhor. Leva o banco de dados de destino e o banco de dados atual como parâmetros. Ele garante que o banco de dados atual seja reativado antes do final do script, para que o próximo comando aplicado na conexão ainda seja executado no banco de dados correto. tem que fornecê-lo sistematicamente. Observe que o script Lua deve redefinir o banco de dados atual no final, aconteça o que acontecer (mesmo no caso de um erro anterior), portanto, torna os scripts complexos complicados e desajeitados.