Eu tenho lido alguns documentos do Redis e testado o tutorial em http://try.redis-db.com/ . Até agora, não vejo diferença entre as tecnologias Redis e cache, como Velocity ou o Enterprise Library Caching Framework
Você está efetivamente adicionando objetos a um armazenamento de dados na memória usando uma chave exclusiva. Não parece haver nenhuma semântica relacional ...
o que estou perdendo?
Respostas:
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 -
Tratamento de votos
Agora, sempre que alguém vota uma pergunta ou resposta, você só precisa fazer isso
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.
Agora, quando você deseja renderizar sua página inicial, solicite ao Redis as 25 perguntas mais recentes.
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
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ê enviapublish
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
fonte
Não é apenas um cache.
fonte
Redis possui habilidades únicas, como scripts lua ultrarrápidos. Seu tempo de execução é igual a C comandos de execução. Isso também traz atomicidade para a manipulação sofisticada de dados Redis, necessária para o trabalho de muitos objetos avançados, como bloqueios e semáforos.
Há um Redis baseado na grade de dados de memória chamado Redisson, que permite criar facilmente aplicativos distribuídos em Java . Graças à distribuídos
Lock
,Semaphore
,ReadWriteLock
,CountDownLatch
,ConcurrentMap
objetos e muitos outros.Perfeitamente trabalha em nuvem e suporta AWS ElastiCache , AWS ElastiCache Cluster e Azure Redis Cache apoio
fonte
Na verdade, não há dependência entre a representação de dados relativa (ou qualquer tipo de representação de dados) e a função do banco de dados (cache, persistência permanente, etc.).
Redis é bom para cache, é verdade, mas é muito mais do que apenas um cache. É um banco de dados de alta velocidade e totalmente na memória. Ele persiste os dados no disco. Não é relacional, é armazenamento de valor-chave.
Nós o usamos na produção. A Redis nos ajuda a criar software que lida com milhares de solicitações por segundo e mantém os dados comerciais dos clientes durante todo o ciclo de vida natural.
fonte
Redis é um cache que melhor se adequa à arquitetura de ambiente distribuído / microsserviço.
É rápido, confiável, fornece atomicidade e consistência e possui diversos tipos de dados, como conjuntos, hashes, lista etc.
Estou usando-o desde o ano passado e ele realmente é um salvador quando você precisa fornecer uma solução pronta para produção muito rapidamente e para quaisquer problemas relacionados ao desempenho, pois você sempre pode usá-lo para armazenar dados em cache.
fonte
Além de ser um servidor de cache, o Redis é especificamente um servidor de estrutura de dados. Ser um cache na forma de um servidor de estrutura de dados significa muito, porque as estruturas de dados são fundamentos de programas ou aplicativos . Considere que você está usando bancos de dados SQL como tecnologia de armazenamento e precisa construir uma lista, um mapa de hash, um conjunto de classificações ou coisas assim, é uma dor no pescoço. O Redis pode fornecer essas funcionalidades diretamente de uma maneira muito simples, simplificando muito o desenvolvimento.
Por outro lado, um servidor de estrutura de dados não precisa estar na forma de um cache. Existem projetos compatíveis com o Redis, mas possuem mecanismos de armazenamento persistente.
fonte
O Redis suporta estruturas de dados como strings, hashes, listas, conjuntos, conjuntos classificados com consultas de intervalo, bitmaps, hiperloglogs, índices geoespaciais com consultas e fluxos de raio. O Redis possui replicação integrada, scripts Lua, despejo de LRU, transações e diferentes níveis de persistência em disco e fornece alta disponibilidade via Redis Sentinel e particionamento automático com Redis Cluster.
implementação com python
https://beyondexperiment.com/vijayravichandran06/redis-data-structure-with-python/
fonte