Não, o Redis é muito mais que um cache.
Como um cache, o Redis armazena pares chave = valor. Mas, diferentemente de um cache, o Redis permite operar com os valores. Existem 5 tipos de dados em Redis - seqüências de caracteres, conjuntos, hash, listas e conjuntos classificados. Cada tipo de dados expõe várias operações.
A melhor maneira de entender o Redis é modelar um aplicativo sem pensar em como você o armazenará em um banco de dados.
Digamos que queremos criar o StackOverflow.com. Para simplificar, precisamos de perguntas, respostas, tags e usuários.
Modelando perguntas, usuários e respostas
Cada objeto pode ser modelado como um mapa. Por exemplo, uma pergunta é um mapa com os campos {id, título, data_asquerida, votos, nome_dados, status}. Da mesma forma, uma resposta é um mapa com os campos {id, question_id, answer_text, answer_by, votes, status}. Da mesma forma, podemos modelar um objeto de usuário.
Cada um desses objetos pode ser armazenado diretamente no Redis como um Hash. Para gerar IDs exclusivos, você pode usar o comando de incremento atômico. Algo assim -
$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK
$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK
Tratamento de votos
Agora, sempre que alguém vota uma pergunta ou resposta, você só precisa fazer isso
$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2
Lista de perguntas para a página inicial
Em seguida, queremos armazenar as perguntas mais recentes a serem exibidas na página inicial. Se você estivesse escrevendo um programa .NET ou Java, armazenaria as perguntas em uma Lista. Acontece que essa é a melhor maneira de armazenar isso também no Redis.
Sempre que alguém faz uma pergunta, adicionamos seu ID à lista.
$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1
Agora, quando você deseja renderizar sua página inicial, solicite ao Redis as 25 perguntas mais recentes.
$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"
Agora que você possui os IDs, recupere itens do Redis usando pipelining e mostre-os ao usuário.
Perguntas por Tags, Ordenadas por Votos
Em seguida, queremos recuperar as perguntas para cada tag. Mas o SO permite que você veja as perguntas mais votadas, novas ou sem resposta em cada tag.
Para modelar isso, usamos o recurso Conjunto classificado de Redis. Um conjunto classificado permite associar uma pontuação a cada elemento. Você pode recuperar elementos com base em suas pontuações.
Vamos em frente e faça isso pela tag Redis
$ zadd questions_by_votes_tagged:redis 2 question:1
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5
1) "question:2"
2) "question:613"
3) "question:1"
O que fizemos aqui? Adicionamos perguntas a um conjunto classificado e associamos uma pontuação (número de votos) a cada pergunta. Cada vez que uma pergunta é votada, aumentaremos sua pontuação. E quando um usuário clica em "Perguntas marcadas com Redis, classificadas por votos", fazemos apenas um zrevrange
e voltamos às principais perguntas.
Perguntas em tempo real sem atualizar a página
E, finalmente, um recurso de bônus. Se você mantiver a página de perguntas aberta, o SO notificará você quando uma nova pergunta for adicionada. Como os Redis podem ajudar aqui?
Redis tem um modelo pub-sub. Você pode criar canais, por exemplo "channel_questions_tagged_redis". Você então subscribe
utiliza usuários para um canal específico. Quando uma nova pergunta é adicionada, você envia publish
uma mensagem para esse canal. Todos os usuários receberiam a mensagem. Você precisará usar uma tecnologia da Web como soquetes da Web ou cometa para realmente entregar a mensagem ao navegador, mas o Redis ajuda você com todo o encanamento do lado do servidor.
Persistência, confiabilidade etc.
Ao contrário de um cache, o Redis persiste os dados no disco rígido. Você pode ter uma configuração mestre-escravo para fornecer melhor confiabilidade. Para saber mais, consulte os tópicos de persistência e replicação aqui - http://redis.io/documentation