O Python 2 não é mais compatível com a comunidade. Recomendamos que você migre aplicativos do Python 2 para o Python 3.

Como migrar do Memcache para o Memorystore

O Memcache é um armazenador de dados na memória distribuído que está incluído no ambiente de execução do Python 2. Muitos aplicativos do App Engine usam o Memcache como cache para tarefas específicas, em vez de depender apenas do armazenamento permanente. Pacotes de serviços, como o Memcache, não estão disponíveis em ambientes de execução mais recentes do App Engine, incluindo o ambiente de execução do Python 3.

Se seu aplicativo Python 2 usar explicitamente o Memcache, você precisará migrar para outra solução de armazenamento em cache antes de executar seu aplicativo em um ambiente Python 3. Recomendamos o uso do serviço de armazenamento em cache do Memorystore para Redis. Ao contrário do Memcache, o Memorystore para Redis não oferece uma versão gratuita. Consulte Preços do Memorystore para mais detalhes.

Se você armazenar dados em cache apenas para acelerar o Cloud NDB, siga as instruções no guia de migração do Cloud NDB, em vez dessas instruções.

Noções básicas sobre as permissões do Memorystore

Toda interação com um serviço do Google Cloud precisa ser autorizada. Por exemplo, para interagir com um banco de dados do Redis hospedado pelo Memorystore, seu aplicativo precisa fornecer as credenciais de uma conta que está autorizada a acessar o Memorystore.

Por padrão, o aplicativo fornece as credenciais da conta de serviço padrão do App Engine, que está autorizada a acessar bancos de dados no mesmo projeto que o aplicativo.

Se alguma das seguintes condições for verdadeira, você precisará usar uma técnica de autenticação alternativa que forneça credenciais explicitamente:

  • Seu aplicativo e o banco de dados do Memorystore estão em projetos diferentes do Google Cloud.

  • Você alterou os papéis atribuídos à conta de serviço padrão do App Engine.

Para saber mais sobre técnicas de autenticação alternativas, veja Como configurar a autenticação para aplicativos de produção de servidor para servidor.

Visão geral do processo de migração

Para migrar seu aplicativo Python e começar a usar o Memorystore em vez do Memcache:

  1. Configure o Memorystore para Redis, que exige que você crie uma instância do Redis no Memorystore e um acesso VPC sem servidor que o aplicativo usa para se comunicar com a instância do Redis.

  2. Instale uma biblioteca de cliente para o Redis e use os comandos do Redis para armazenar dados em cache.

    O Memorystore para Redis é compatível com qualquer biblioteca de cliente para Redis. Este guia descreve o uso da biblioteca de cliente redis-py 3.0 para enviar comandos do Redis a partir do seu aplicativo.

  3. Teste as atualizações.

  4. Implante o aplicativo no App Engine.

Como configurar o Memorystore para Redis

Para configurar o Memorystore para Redis:

  1. Crie uma instância do Redis no Memorystore.

    Quando solicitado a selecionar uma região para sua instância do Redis, selecione a mesma região em que o aplicativo do App Engine está localizado.

  2. Anote o endereço IP e o número da porta da instância do Redis criada. Você usará essas informações ao criar um cliente Redis no seu código.

  3. Conecte o App Engine a uma rede VPC. Seu aplicativo só pode se comunicar com o Memorystore por meio de um conector VPC.

    Não se esqueça de adicionar as informações de conexão VPC ao arquivo app.yaml, conforme descrito em Como configurar seu aplicativo para usar um conector.

Instalar dependências

Para disponibilizar a biblioteca de cliente redis-py para seu aplicativo quando ele for executado no App Engine:

  1. Adicione a seguinte linha ao arquivo requirements.txt do seu app:

     redis == 3.3.11
        

    Recomendamos que você use a versão 3.3.11, já que ela é compatível com aplicativos Python 2.7.

  2. Se você ainda executar seu aplicativo no ambiente de execução do Python 2:

    1. Use a versão 6 ou posterior de pip com a sinalização -t <directory> para instalar as bibliotecas em uma pasta local chamada lib. Exemplo:

      pip install -t lib -r requirements.txt

    2. Verifique se o arquivo appengine_config.py do app especifica o diretório lib.

    O App Engine fará o upload de todas as bibliotecas no diretório especificado no arquivo appengine_config.py. Para mais detalhes, consulte Como usar as bibliotecas do Python 2.

O ambiente de execução do Python 3 do App Engine fará o upload automático de todas as bibliotecas do arquivo requirements.txt do aplicativo quando você implantar o aplicativo.

Para desenvolvimento local, recomendamos que você instale as dependências em um ambiente virtual como virtualenv para Python 2 ou venv para Python 3.

Como criar um cliente Redis

Para interagir com um banco de dados Redis, seu código precisa criar um cliente Redis para gerenciar a conexão com seu banco de dados Redis. As seções a seguir descrevem a criação de um cliente Redis usando a biblioteca de cliente redis-py.

Como especificar variáveis de ambiente

A biblioteca de cliente redis-py usa duas variáveis de ambiente para montar o URL do banco de dados do Redis:

  • Uma variável para identificar o endereço IP do banco de dados do Redis criado no Memorystore.
  • Uma variável para identificar o número da porta do banco de dados do Redis criado no Memorystore.

Recomendamos que você defina essas variáveis no arquivo app.yaml do aplicativo em vez de defini-las diretamente no código. Isso facilita a execução do aplicativo em diferentes ambientes, como um ambiente local e o App Engine.

Por exemplo, adicione as seguintes linhas ao seu arquivo app.yaml:

 env_variables:
          REDISHOST: '10.112.12.112'
          REDISPORT: '6379'
    

Como importar a redis-py e criar o cliente

Depois de definir as variáveis de ambiente REDISHOST e REDISPORT, use as seguintes linhas para importar a biblioteca redis-py e criar um cliente:

  import redis

      redis_host = os.environ.get('REDISHOST', 'localhost')
      redis_port = int(os.environ.get('REDISPORT', 6379))
      redis_client = redis.Redis(host=redis_host, port=redis_port)
    

Se você usou uma versão mais antiga do redis-py em outros aplicativos, você pode ter usado a classe StrictClient em vez de Client. No entanto, o redis-py agora recomenda Client em vez de StrictClient.

Como usar comandos do Redis para armazenar e recuperar dados no cache

Embora o banco de dados do Memorystore para Redis seja compatível com a maioria dos comandos do Redis, você só precisa usar alguns comandos para armazenar e recuperar dados do cache. A tabela a seguir sugere comandos do Redis que você pode usar para armazenar dados em cache. Para saber como chamar esses comandos a partir do seu aplicativo, veja a documentação de sua biblioteca de cliente.

Embora o Memcache forneça alternativas assíncronas para muitos comandos, a biblioteca de cliente redis-py nem sempre fornece métodos assíncronos equivalentes. Se você precisar que todas as interações com o cache sejam assíncronas, outras bibliotecas de cliente do Redis para Python estarão disponíveis.
Tarefa Comando do Redis
Criar uma entrada no cache de dados e
definir um prazo de validade para a entrada
SETNX
MSETNX
Recuperar dados do cache GET
MGET
Substituir valores de cache existentes SET
MSET
Aumentar ou diminuir valores de cache numéricos INCR
INCRBY
DECR
DECRBY
Excluir entradas do cache DEL
UNLINK
Fornecer suporte a interações simultâneas com o cache (compare and set) Veja detalhes sobre as transações do Redis. A biblioteca de cliente redis-py exige que todas as transações ocorram em um pipeline.

Como testar suas atualizações

Ao testar seu aplicativo localmente, pense em executar uma instância local do Redis para evitar a interação com dados de produção (o Memorystore não fornece um emulador). Para instalar e executar o Redis localmente, siga as instruções na documentação do Redis. Ainda não é possível executar o Redis localmente no Windows.

Para receber mais informações sobre como testar aplicativos do Python 2, consulte Como usar o servidor de desenvolvimento local.

Implantar o app

Quando seu aplicativo estiver em execução no servidor de desenvolvimento local sem erros:

  1. Teste o aplicativo no App Engine.

  2. Se o aplicativo for executado sem erros, use a divisão de tráfego para aumentar gradualmente o tráfego de seu aplicativo atualizado. Monitore de perto o aplicativo em busca de problemas no banco de dados antes de direcionar mais tráfego para o aplicativo atualizado.