A SpringSource liberou a primeira versão estável de uma biblioteca open source que facilita a integração do Redis com aplicações Java, oferecendo uma API unificada e mais fácil de usar para serialização de objetos em aplicações baseadas no Spring.
O Redis é um repositório chave-valor, apoiado pela VMWare e usado por sites de grande porte como GitHub e StackOverflow. É uma base de dados NoSQL que foca em simplicidade e performance (os dados são todos mantidos em memória), sendo acessado através de um conjunto amplo de comandos. Diferentemente de vários outros repositórios chave-valor, suporta tipos de dados adicionais (além de strings). Veja alguns exemplos simples de comandos:
set my-news-site INFOQ =>OK get my-news-site =>"INFOQ" set my-counter 22 =>OK get my-counter =>"22" incr my-counter =>(integer) 23 get my-counter =>"23"
O Redis vem com clientes para diversas linguagens de programação, incluindo Haskell, Tcl, Go e SmallTalk, além de C# e Java. Para integração com Java, há as bibliotecas Jedis, JRedis, JDBC Redis e RJC;
O Spring Data Redis é parte do projeto "guardachuva" Spring Data que tem como objetivo promover o uso de banco de dados não relacionais em ambientes Spring (como já feito para JPA/Hibernate). Seus maiores objetivos são portabilidade e consistência em aplicações Java baseadas em Spring. Em seu nível mais baixo, o Spring Data Redis fornece uma abstração básica das bibliotecas clientes de Redis em Java. Com isso, desenvolvedores podem focar na API unificada do Spring Redis e facilmente alternar entre as diferentes implementações (por motivo de performance, por exemplo).
É oferecida a RedisConnection, uma abstração para uma conexão rápida (mas não thread-safe) de uma instância do Redis (similar ao EntityManager do JPA ou 0 Session do Hibernate) e o RedisConnectionFactory que cria as conexões (similar o EntityManagerFactory do JPA ou o SessionFactory do Hibernate). Estas abstrações ocultam o mecanismo de implementação atual com uma interface de programação comum, facilitando a portabilidade entre bibliotecas clientes do Redis em Java.
O RedisConnection oferece todos os comandos do Redis, mas com a sintaxe do Java. Todo o poder do Redis pode ser acessado através desta interface, usando comandos de baixo nível para salvar ou atualizar as chaves.
O exemplo a seguir pode ser escrito usando os métodos Java set, get e incr fornecidos em RedisConnection. Os comandos são os mesmos, independentemente da biblioteca Java utilizada. A troca entre as diferentes implementações fica isolada em uma única linha de configuração, no contexto do Spring:
<!-- Jedis ConnectionFactory --> <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/> <!-- JRedis ConnectionFactory --> <bean class="org.springframework.data.redis.connection.jredis.JredisConnectionFactory"/> <!-- RJC ConnectionFactory --> <bean class="org.springframework.data.redis.connection.rjc.RjcConnectionFactory"/>
Em um nível mais alto de abstração, o Spring Data Redis oferece o RedisTemplate, que pode ser usado para armazenar objetos Java inteiros diretamente em uma instância do Redis, ao invés de apenas tipos básicos (ex.: strings e números). Numa instalação padrão do Redis, a serialização pode ser feita através de serialização do JDK (a forma padrão), usando toString(), JSON (com a biblioteca Jackson) e XML (com o módulo OXM do Spring).
Para mais informações, veja um video introdutório (em inglês), que abrange ambos o Redis e o Spring Data Redis, a documentação de referência e os Javadocs. O código-fonte está disponível no GitHub.