O Redis é uma base chave/valor (key/value) rápido, muito rápido. Coisas com muito volume e pouca informação.
Para caching e sessões ele é ainda melhor por seus recursos de expiração automática (veja expire e ttl no Redis).
Além disso, fazer sharding é fácil. E o modo cluster está quase pronto para produção (em testes já está há algum tempo).
Mas o Redis é ruim para coisas que precisam de persistência de muitos dados, muito armazenamento. Isso porque o uso de memória necessário será alto ele terá que usar o disco, algo que reduzirá em muito sua velocidade.
Outra coisa que ele não foi feito é para buscas em seu conteúdo. Ou relacionamentos entre dados (existe a figura da base de dados, mas não de tabelas ou integridade referencial).
O tipo mais comum de dados do Redis é o par de chave e valor, aonde o valor é uma string. Essa string pode conter qualquer coisa, como um json, um XML ou uma página da web (muito útil para cache, por exemplo).
Além disso, possui tipos de lista. São basicamente arrays e hashes. Os arrays podem ser ordenados (lists ou sorted sets) ou não ordenados (sets).
Em todos os tipos, as duplicidades são gerenciadas (impedidas) pelo próprio Redis (algo como o insert or update do MySQL). Você pode usar um set para armazenar a lista de ips ou uma lista dos maiores aeroportos do mundo ordenados pelo número de pousos por ano (usando um sorted set aonde o índice é o valor da compra).
Outro tipo, são os hashes. Hashes permitem que você salve, ao invés de uma string, pares de chaves e valores. Até aí, nada muito diferente de salvar um json como string. A diferença está na forma de recuperar os valores desse Hash. Ao invés de receber uma string com um json, parsear é buscar a chave login do meu json de sessão, posso acessar diretamente o valor do login da sessão.
No primeiro caso eu faria:
SET session:46rfgdye553ys267 "name: Otávio, login:otavio"
E recuperaria com:
GET session:46rfgdye553ys267
No segundo caso eu gravaria como:
hmset session:46rfgdye553ys267 name Otávio login otavio
E recuperaria diretamente a informação do login com:
hmget session:46rfgdye553ys267 login
Isso é muito útil para sessões e para configurações da aplicação do usuário, por exemplo. O uso do hmset permite que eu mude uma configuração da aplicação sem ter que juntar todas as configurações e criar um json delas, por exemplo.
Mais info em:
https://www.digitalocean.com/community/articles/how-to-install-and-use-redis