18 de nov de 2012

Xmemcached – Client Memcached de alta performance


Como essas paradas de NoSql está muito na moda, decidi escrever sobre um client de memcached que venho utilizando há algum tempo, o Xmemcached.

Antes uma breve explanação sobre o Memcached.

Memcached

O Memcached é um sistema de cacheamento em memória, distribuído e de excelente performance. Ele trabalha em sistema chave/valor, onde você pode armazenar diversos tipos de conteúdo, como textos e objetos serializados. Para mais informações sobre o Memcached, compilação e instalação acesse o link abaixo. Uma versão compilada para Windows está disponível para download junto com a aplicação de exemplo no final do post.
http://code.google.com/p/memcached

Xmemcached

O Xmemcached é um client Java para o Memcached com alta performance, principalmente em ambientes muti-thread, além de disponibilizar outros recursos interessantes, como adição dinâmica de servidores e configuração de pool de conexões.
Abaixo, um link com um teste de performance comparando 3 clientes de Memcached:
http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html

Antes de mais nada, coloque o Memcached para rodar!
Linux:
memcached -p 11211
Windows:
memcached.exe -p 11211

Vão ser necessárias as seguintes dependências para construir o projeto Maven:

 org.slf4j
 slf4j-api
 1.7.2


 com.googlecode.xmemcached
 xmemcached
 1.3.8



Aplicação simples:
package com.xmemcachedexample;

import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.utils.AddrUtil;

public class App {

    public static void main(String[] args) throws Exception {

        MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
        MemcachedClient client = builder.build();

        //Classe deve implementar interface java.io.Serializable
        ExampleBean a = new ExampleBean();
        a.setText("Me coloca no cache!");

        //inserir objeto no cache por 30 segundos
        client.set("chave", 30, a);
        System.out.println(client.get("chave"));

        //remover objeto do cache
        client.delete("chave");
        System.out.println(client.get("chave"));

        //contador
        client.incr("contador", 0);
        System.out.println(client.get("contador"));
        client.incr("contador", 2);
        client.incr("contador", 1);
        System.out.println(client.get("contador"));

        client.shutdown();
        
    }
}

Adicionar/Remover servidores dinamicamente:
MemcachedClient client = new XMemcachedClient(AddrUtil.getAddresses("server1:11211 server2:11211"));
//adicionar servidor
client.addServer("server3:11211");
//remover servidor
client.removeServer("server1:11211");


Configurando um pool de conexões:
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
builder.setConnectionPoolSize(5);


Referências:
http://code.google.com/p/xmemcached
http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
http://code.google.com/p/memcached

Código fonte: http://depositfiles.com/files/vs2kt05wv

É nóis, manow! Aqui é Java!

Nenhum comentário:

Postar um comentário