Todos os produtos
Search
Central de documentação

ApsaraDB for Memcache:Armazenar variáveis de sessão do PHP em cache

Última atualização: Jun 27, 2026

Contexto

Ao criar um site em PHP, é comum armazenar dados na variável global $_SESSION para facilitar o acesso. O arquivo de configuração ini do PHP contém definições da seção [Session] que determinam se os dados serão salvos em arquivo ou no servidor Memcached. Essa decisão depende do parâmetro session.save_handler = memcached. Na maioria dos casos, não há necessidade de persistência para os dados de sessão. Dessa forma, armazenar essas informações em cache no Memcached melhora o desempenho do site.

Descrição do problema

Tanto o ApsaraDB for Memcache quanto instâncias de Memcached auto-hospedadas seguem o protocolo padrão do Memcached. Para reduzir o uso de memória dos servidores e diminuir custos com manutenção, alguns usuários desejam migrar as informações de sessão do Memcached auto-hospedado para o ApsaraDB for Memcache sem alterar o código-fonte. Este tópico orienta você a resolver problemas que podem surgir durante esse processo de migração.

A principal diferença entre o ApsaraDB for Memcache e o Memcached auto-hospedado reside na autenticação por conta e senha.

  • ApsaraDB for Memcache: Trata-se de um cluster distribuído que oferece serviços externos de maneira unificada. Ele garante balanceamento de carga sem ponto único de falha (SPOF) e permite ajustes flexíveis de configuração sem reiniciar o serviço. Além disso, possui mecanismos de segurança integrados, como lista de permissões, limitação de taxa e autenticação por conta e senha.

  • Memcached auto-hospedado: A maioria das instâncias auto-hospedadas não exige conta ou senha, portanto, diferentemente do ApsaraDB for Memcache, elas não possuem autenticação SASL. Para migrar as informações de sessão armazenadas no Memcached auto-hospedado para o ApsaraDB for Memcache, configure a conta e a senha no arquivo php.ini.

Solução

  1. Versões mais antigas da extensão PHP Memcached não suportam esse recurso. Atualize a extensão PHP Memcached para a versão 2.2.0. Execute os comandos abaixo:

     wget http://pecl.php.net/get/memcached-2.2.0.tgz
     tar  zxvf  memcached-2.2.0.tgz
    
     cd memcached-2.2.0
    
     phpize
    
     ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
    
     make
    
     make install
  2. Localize o arquivo memcached.so atualizado e execute o comando stat para confirmar a atualização (verifique a data da última modificação).

  3. Modifique a configuração do arquivo php.ini.

    1. Seção Session: Localize a seção [Session] e altere o mecanismo de armazenamento para:

      session.save_handler = memcached **(Attention: it has a d)**

      Altere o endereço de armazenamento, ou seja, o endereço de acesso ao Memcache, para:

      session.save_path = "be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211" (Attention: for an extension with a d, no preceding tcp:// is needed. For an extension without a d, the preceding tcp:// is required)

      Defina o tempo de vida da chave em cache no Memcached:

      session.gc_maxlifetime = 1440 (Unit: second. A reasonable life time is strongly recommended to make sure that only hotspot data is cached in ApsaraDB for Memcache)
    2. Seção Memcached: Na área global do arquivo php.ini, crie uma seção [memcached] separada e adicione a seguinte configuração no espaço disponível:

      [memcached]
      memcached.use_sasl = On
      memcached.sess_binary = On
      memcached.sess_sasl_username = "your_ocs_name"
      memcached.sess_sasl_password = "your_ocs_password"
      memcached.sess_locking = Off

As etapas de instalação estão concluídas. Para consultar outros parâmetros úteis nas seções Memcached e Session mencionadas anteriormente, acesse os links abaixo.

http://php.net/manual/en/memcached.configuration.php

http://php.net/manual/en/session.configuration.php

Testes

Crie o seguinte código de teste no arquivo session.php:

<?php
session_start();
$sn = session_id();
echo "session id:".$sn."\n";
$_SESSION["ocs_key"]="session_value";
echo "session:".$_SESSION["ocs_key"]."\n";
?>

A saída será semelhante a esta:

session id:ttrct9coa2q62r2sodlq4qf376

session:session_value

Recupere os dados gravados pelo script session.php diretamente do Memcache usando o código de teste no arquivo get.php.

<?php
$memc = new Memcached();
$memc->setOption(Memcached::OPT_COMPRESSION, false);
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$memc->addServer("be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com", 11211);
$memc->setSaslAuthData("your_ocs_name", "your_ocs_password");
echo $memc->get("memc.sess.key.ttrct9coa2q62r2sodlq4qf376");
/*Attention: Here the key has a prefix defined by the memcached.sess_prefix field in php.ini. The default value is "memc.sess.key." The prefix is followed by the sessionid "ttrct9coa2q62r2sodlq4qf376" as shown above. */
?>

Saída esperada:

ocs_key|s:13:"session_value";

Esse resultado indica que a SESSION do PHP foi gravada com sucesso no Memcache.

Instruções

  1. Leia o conteúdo em inglês para compreender O QUE precisa ser comunicado

  2. Escreva o texto em português do Brasil DO ZERO — esqueça a estrutura das frases em inglês

  3. Preserve toda a formatação markdown, blocos de código, links e imagens exatamente como estão

  4. Tags xref (<a data-tag="xref" ...>texto</a>) — preserve a TAG INTEIRA com todos os atributos na ordem e caixa originais, traduza APENAS o texto visível entre > e

  5. Aplique todas as regras específicas do idioma rigorosamente

  6. Aplique as regras de stopwords com tolerância zero

  7. Use o modo imperativo em passos numerados e listas procedimentais

  8. Garanta consistência terminológica — mesmo termo = mesma tradução em todo o documento

  9. Varie os inícios de frase em listas/tabelas — nenhum início deve se repetir 3+ vezes

  10. Retorne APENAS o documento markdown em português do Brasil, sem explicações