Usando Memcached em sua aplicação

EDITADO: Veja o novo cartridge memcached

 

Usando Memcached em sua aplicação

Memcached é um sistema de cache em memória utilizado para acelerar sites dinâmicos, cacheando dados e objetos na RAM para reduzir o número de vezes que uma fonte de dados externa (como um banco de dados ou uma API) deva ser acessada.

Neste tutorial usaremos o quickstart em https://github.com/caruccio/openshift-memcached-embedded para criar uma instância de memcached .

 

Criando a aplicação

Este quickstart funciona com qualquer tipo de aplicação. Neste tutorial criarei uma aplicação python-2.6:

$ rhc app create -a myapp python-2.6

Se deseja utilizar memcached em uma aplicação já existente, basta baixar o repositório com o comando $ rhc git-clone myapp.

Agora basta incluir o código do memcached no repositório local:

$ cd myapp
$ git remote add memcached -m master git://github.com/caruccio/openshift-memcached-embedded.git
$ git pull -s recursive -X theirs memcached master

Por fim, faça o deploy:

$ git push

 

Conectando no Memcached

Utilize a variável de ambiente OPENSHIFT_INTERNAL_IP e a porta 22322 para conectar ao serviço. Estes parâmetros podem ser alterados editando o arquivo .openshift/action_hooks/post_deploy.

Por exemplo, em python pode-se usar o módulo python-memcached (pode ser que você precise incluir este módulo como dependência no arquivo setup.py):

import memcache, os
mc = memcache.Client([os.environ['OPENSHIFT_INTERNAL_IP'] + ':22322'])

Em php utilize o módulo pecl-memcache:

$mc = new Memcache;
$mc->connect(getenv('OPENSHIFT_INTERNAL_IP'), 22322) or die ("Could not connect");

 

Memcached e aplicações escaláveis

Este quickstart foi projetado para rodar uma instância de memcached em cada gear da aplicação. Isto significa que, ao escalar, um novo memcached será criado, sendo acessível apenas pelo gear local. Um dado inserido no memcached de um gear não é visível a partir de outros gears.

Note que este modelo só pode ser utilizado com segurança se a invalidação do cache (remover ou atualizar um registro) for baseada em timeout. Por exemplo, se o dado buscado do banco e inserido no cache tiver uma vida útil pré-definida (60 segundos, 1 hora, etc). Para casos onde o cache precisa ser invalidado a partir de um evento assíncrono (ex. post edita no blog, imagem atualizada, etc) todas as instâncias de memcached deveriam ser atualizadas, o que é inviável pelo fato de cada instância existir apenas dentro de seu gear.

Estamos trabalhando para disponibilizar uma versão com visibilidade global, ou seja, todos os gears enxergando a mesma instância memcached.

 

Pronto! Prepare-se para voar!

Tem mais dúvidas? Envie uma solicitação

2 Comentários

  • 0
    Avatar
    Mateus Caruccio

    Olá Javier.

    Escolhemos memcached  por ser muito popular e possuir uma interface simples - é possível acessá-lo apenas com um telnet/nc.

    Obrigado pela dica do hazelcast. Vou olhar assim que possível e talvez criar um quickstart de exemplo.

    Abraços!

    PS: El portugués es perfecto!

  • 0
    Avatar
    Javier Tomás Zon

    Já pensou em escolher um datagrid diferente?  Por exemplo hazelcast: http://www.hazelcast.com/

    Mesmo jeito de utilização!  Mas eles enxergam cada instancia sem ter que reinventar funcionalidades!

    Abraço!

    PS: Desculpem pelo meu português :)

Por favor, entre para comentar.
Powered by Zendesk