Cache de objetos com o Memcache
Filed Under (Performance) by admin on 23-09-2009
O Memcached foi desenvolvido pela Danga Interactive para
atender ao livejournal.com um
site com mais de 20 milhões de acessos dinâmicos por dia.
Hoje ele é distribuido sob a permissive free software license e pode
ser baixado em http://danga.com/memcached/dist/
Pre-requisito
O Memcached utiliza a libevent, e caso seu sistma não possua esta biblioteca
você poderá baixa-la em http://www.monkey.org/~provos/libevent-1.4.8-stable.tar.gz
e seguir os passos:
tar xfz libevent-1.4.8-stable.tar.gz
./configure && make && sudo make install
sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib
Instalando o Memcached
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar xfz memcached-1.2.6.tar.gz
cd memcached-1.2.6
./configure && make && sudo make install
OBS: O utilitário apt-get faz a instalação do memcached e da dependência libevent.
O comando é o sudo apt-get install memcached
Agora vamos roda-lo:
# (d = daemon, m = memory, u = user, l = IP to listen to, p = port)
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211
verifique se ele está ouvindo na porta definida acima:
netstat -a | grep 11211
Suporte a linguagens
O memcached possui clients-api para:
- C/C++
- Erlang
- PHP
- Perl
- Java
- Phyton
- Ruby
- .NET
- MySQL
e outras http://code.google.com/p/memcached/wiki/Clients
Escolhi como exemplo o Ruby e o PHP e em ambos clients-api a “serialização” dos objetos é automática.
Memcached & PHP
apt-get install php5-memcache
verifique se a linha
extension=memcache.so não está comentada no arquivo /etc/php5/conf.d/memcache.ini
agora é só reiniciar o apache
/etc/init.d/apache2 restart
Fiz um código simples para acessar uma base de dados e retornar uma coleção da classe Pessoa:
teste.php
<?php
require “persistence/Entity.class.php”;
class Pessoa extends Entity {
public $nome;
public $endereco;
public function to_string() {
echo $this->nome.” - “.$this->endereco;
}
}
$memcache=new Memcache;
$memcache->connect(’localhost’, 11211) or die(’Oops!’);
$pessoas = $memcache->get(’key’);
if (!$pessoas) {
$pessoas = Pessoa::findAll(”nome”);
$memcache->set(’key’,$pessoas,false,60);
}
print_r($pessoas);
?>
Ruby
sudo gem install Ruby-MemCache
Este exemplo em Ruby exibe outros recursos do Memcache como compressão de dados, debug e restrição de escrita.
teste.rb
require “rubygems”
require “memcache”
require “persistence.rb”
class Pessoa
attr_accessor :nome, :endereco
def to_s
puts “#{nome} - #{endereco}”
end
end
memcache_options = {
:compression => true,
:debug => false,
:namespace => “mem-teste”,
:readonly => false,
:urlencode => false
}
memcache_servers = [ '127.0.0.1:11211' ]
CACHE = MemCache::new(memcache_options)
CACHE.servers = memcache_servers
pessoas = CACHE["key"]
if !pessoas
pessoas = Persistence::findAll(”pessoas”, “nome”)
CACHE["key"] = pessoas
end
puts pessoas
Das ist! um poderoso cache em minutos.


Это интересно. Подскажите, где я могу об этом прочитать?…
O Memcached foi desenvolvido pela Danga Interactive para
atender ao livejournal.com um
site com mais de 20 milhões de acessos dinâmicos por dia…..
Могу предложить Вам посетить сайт, на котором есть много статей по этому вопросу….
Hoje ele é distribuido sob a permissive free software license e pode
ser baixado em http://danga…..