Casos de uso comuns do ElastiCache e como ele pode ajudar
Seja para fornecer as últimas notícias, um placar dos 10 primeiros colocados, um catálogo de produtos ou a venda de ingressos para um evento, a velocidade é o nome do jogo. O sucesso do seu site e negócios é significativamente afetado pela rapidez com que você fornece o conteúdo.
Em "Para usuários da Web impacientes, um piscar de olhos é um tempo muito longo para se esperar
Se alguém quiser dados, você poderá enviar esses dados com muito mais rapidez se eles estiverem armazenados em cache. Isso é verdade, seja para uma página da Web ou um relatório que desencadeie decisões empresariais. Sua empresa pode se dar ao luxo de não armazenar em cache suas páginas da Web, de modo a entregá-las com a menor latência possível?
Talvez seja intuitivamente óbvio que você queira armazenar em cache seus itens mais solicitados. Mas, por que não armazenar em cache seus itens menos solicitados? Mesmo a consulta de banco de dados ou a chamada de API remota mais otimizada será visivelmente mais lenta do que a recuperação de uma chave simples de um cache de memória. Visivelmente mais lento tende a direcionar os clientes para outros lugares.
Os exemplos a seguir ilustram algumas das maneiras de como o uso do ElastiCache pode melhorar a performance geral da sua aplicação.
Tópicos
Armazenamento de dados na memória
O objetivo principal de um armazenamento de chaves/valores na memória é fornecer acesso ultrarrápido (latência inferior a milissegundos) e de baixo custo a cópias de dados. A maioria dos armazenamentos de dados possui áreas de dados que são frequentemente acessadas, mas raramente atualizadas. Além disso, as consultas a um banco de dados sempre serão mais lentas e mais caras do que localizar uma chave em um cache de pares de chave/valor. Algumas consultas de banco de dados são especialmente caras para executar. Um exemplo é consultas que envolvem junções em várias tabelas ou consultas com cálculos intensos. Ao armazenar em cache esses resultados de consulta, você paga o preço da consulta apenas uma vez. Em seguida, você pode recuperar rapidamente os dados várias vezes sem ter que voltar a executar a consulta.
O que devo armazenar em cache?
Ao decidir quais dados devem ser armazenados em cache, considere estes fatores:
Velocidade e despesas: é sempre mais lento e mais caro obter dados de um banco de dados do que de um cache. Algumas consultas de banco de dados são inerentemente mais lentas e mais caras do que outras. Por exemplo, consultas que executem junções em várias tabelas são muito mais lentas e mais caras do que simples consultas de tabela única. Se os dados de interesse exigirem uma consulta lenta e cara de obter, eles são candidatos para armazenamento em cache. Se a obtenção dos dados exigir uma consulta relativamente rápida e simples, os dados ainda podem ser candidatos para armazenamento em cache, dependendo de outros fatores.
Dados e padrão de acesso: determinar o que armazenar em cache também envolve a compreensão dos dados e seus padrões de acesso. Por exemplo, não faz sentido armazenar dados em cache que mudem rapidamente ou que sejam raramente acessados. Para que o armazenamento em cache ofereça um benefício real, os dados devem ser relativamente estáticos e frequentemente acessados. Um exemplo é um perfil pessoal em um site de mídia social. Por outro lado, você não vai querer armazenar dados em cache se esse armazenamento não oferecer vantagem de velocidade ou custo. Por exemplo, não faz sentido armazenar em cache páginas da Web que retornem resultados de uma pesquisa, pois tais consultas e resultados são quase sempre exclusivos.
Desatualização: por definição, os dados armazenados em cache são dados obsoletos. Mesmo que, em certas circunstâncias, não sejam obsoletos, eles sempre devem ser considerados e tratados como tal. Para dizer se os seus dados são candidatos para armazenamento em cache, determine a tolerância da sua aplicação a dados obsoletos.
Seu aplicativo pode ser capaz de tolerar dados obsoletos em um contexto, mas não em outro. Por exemplo, suponha que o seu site informe um preço de ações negociadas publicamente. Seus clientes podem aceitar alguma desatualização com um aviso de isenção de responsabilidade de que os preços podem ser n minutos atrasados. Mas, se você informar o preço das ações a um corretor que faça uma venda ou compra, você desejará dados em tempo real.
Considere armazenar seus dados em cache se o seguinte for verdadeiro:
Seus dados são lentos ou caros para obtenção em comparação à recuperação do cache.
Os usuários acessam seus dados com frequência.
Seus dados permanecem relativamente iguais, ou se eles mudam rapidamente, a prontidão não é um problema grande.
Para ter mais informações, consulte Estratégias de armazenamento em cache para Memcached.
Placares de jogos
Com conjuntos classificados do Valkey ou Redis OSS, você pode mover a complexidade computacional de placares da sua aplicação para o seu cluster.
Placares, como os 10 primeiros líderes em um jogo, são computacionalmente complexos. Isso é especialmente verdadeiro quando há um grande número de jogadores concorrentes e continuamente mudando de pontuação. Os conjuntos classificados do Valkey e do Redis OSS garantem a exclusividade e a ordenação dos elementos. Com os conjuntos classificados, a cada vez que um novo elemento for adicionado ao conjunto classificado ele é reorganizado em tempo real. Em seguida, eles são adicionados ao conjunto em sua ordem numérica correta.
No diagrama a seguir, veja como funciona um placar de jogos do ElastiCache.
exemplo Placa do Valkey ou Redis OSS
Neste exemplo, quatro jogadores e suas pontuações são inseridos em uma lista classificada usando ZADD
. O comando ZREVRANGEBYSCORE
lista os jogadores por pontuação, de alta a baixa. Em seguida, ZADD
é usado para atualizar a pontuação de June, substituindo a entrada existente. Finalmente, ZREVRANGEBYSCORE
lista os jogadores por pontuação, de alta a baixa. A lista mostra que June subiu no ranking.
ZADD leaderboard 132 Robert ZADD leaderboard 231 Sandra ZADD leaderboard 32 June ZADD leaderboard 381 Adam ZREVRANGEBYSCORE leaderboard +inf -inf 1) Adam 2) Sandra 3) Robert 4) June ZADD leaderboard 232 June ZREVRANGEBYSCORE leaderboard +inf -inf 1) Adam 2) June 3) Sandra 4) Robert
O seguinte comando informa June sobre sua classificação entre todos os jogadores. Como o ranking é baseado em zero, ZREVRANK retorna um 1 para June, que está na segunda posição.
ZREVRANK leaderboard June 1
Para obter mais informações, consulte a documentação do Valkey
Mensagens (publicação/assinatura)
Ao enviar uma mensagem de e-mail, você a envia para um ou mais destinatários especificados. No paradigma de publicação/assinatura do Valkey e Redis OSS, você envia uma mensagem para um canal específico, sem saber quem a receberá. As pessoas que recebem a mensagem são aquelas que assinam o canal. Por exemplo, suponha que você assine o canal news.sports.golf. Você e todos os outros assinantes do canal news.sports.golf receberão todas as mensagens publicadas em news.sports.golf.
A funcionalidade de publicação/assinatura não tem relação com nenhum espaço de chaves. Portanto, ela não interferirá em nenhum nível. No diagrama a seguir há uma ilustração do sistema de mensagens do ElastiCache com Valkey ou Redis OSS.
Assinatura
Para receber mensagens em um canal, é necessário assiná-lo. Você pode assinar um único canal, vários canais especificados ou todos os canais que corresponderem a um padrão. Para cancelar uma assinatura, você cancela o registro do canal especificado quando se inscreveu nele. Ou, se você se inscreveu usando correspondência de padrões, você cancela a assinatura usando o mesmo padrão usado anteriormente.
exemplo - Assinatura de um único canal
Para assinar um único canal, use o comando SUBSCRIBE, especificando o canal que deseja assinar. No exemplo a seguir, um cliente assina o canal news.sports.golf.
SUBSCRIBE news.sports.golf
Depois de um tempo, o cliente cancela a assinatura do canal usando o comando UNSUBSCRIBE, especificando o canal do qual cancelar a assinatura.
UNSUBSCRIBE news.sports.golf
exemplo - Assinaturas de vários canais especificados
Para assinar vários canais específicos, liste esses canais com o comando SUBSCRIBE. No exemplo a seguir, um cliente assina os canais news.sports.golf, news.sports.soccer e news.sports.skiing.
SUBSCRIBE news.sports.golf news.sports.soccer news.sports.skiing
Para cancelar uma assinatura de um canal específico, use o comando UNSUBSCRIBE e especifique o canal do qual cancelar a assinatura.
UNSUBSCRIBE news.sports.golf
Para cancelar assinaturas em vários canais, use o comando UNSUBSCRIBE e especifique os canais dos quais cancelar a assinatura.
UNSUBSCRIBE news.sports.golf news.sports.soccer
Para cancelar todas as assinaturas, use UNSUBSCRIBE
e especifique cada canal. Ou use UNSUBSCRIBE
e não especifique um canal.
UNSUBSCRIBE news.sports.golf news.sports.soccer news.sports.skiing
ou
UNSUBSCRIBE
exemplo - Assinaturas usando a correspondência de padrões
Os clientes podem assinar todos os canais que correspondem a um padrão usando o comando PSUBSCRIBE.
No exemplo a seguir, um cliente assina todos os canais de esportes. Você não lista todos os canais de esportes individualmente, como seria feito usando SUBSCRIBE
. Em vez disso, com o comando PSUBSCRIBE
, você usa a correspondência de padrões.
PSUBSCRIBE news.sports.*
exemplo Cancelar assinaturas
Para cancelar assinaturas desses canais, use o comando PUNSUBSCRIBE
.
PUNSUBSCRIBE news.sports.*
Importante
A string de canal enviada a um comando [P]SUBSCRIBE e aquela enviada ao comando [P]UNSUBSCRIBE devem corresponder. Você não pode PSUBSCRIBE
em news.* e PUNSUBSCRIBE
de news.sports.* ou UNSUBSCRIBE
de news.sports.golf.
Publicação
Para enviar uma mensagem a todos os assinantes de um canal, use o comando PUBLISH
, especificando o canal e a mensagem. O seguinte exemplo publica a mensagem, "It’s Saturday and sunny. I’m headed to the links." no canal news.sports.golf.
PUBLISH news.sports.golf "It's Saturday and sunny. I'm headed to the links."
Um cliente não pode publicar em um canal no qual esteja inscrito.
Para obter mais informações, consulte Publicação/Assinatura
Dados de recomendação (hashes)
Usar INCR ou DECR no Valkey ou no Redis OSS simplifica a compilação de recomendações. Cada vez que um usuário "curte" um produto, você aumenta um contador de item:productID:like. Cada vez que um usuário "descurte" um produto, você aumenta um contador de item:productID:dislike. Usando hashes, você também pode manter uma lista de todos aqueles que curtiram ou não curtiram um produto.
exemplo - Curtidas e descurtidas
INCR item:38923:likes HSET item:38923:ratings Susan 1 INCR item:38923:dislikes HSET item:38923:ratings Tommy -1
Depoimentos de clientes do ElastiCache
Para saber mais sobre como empresas como a Airbnb, a PBS a Esri e outras estão usando o Amazon ElastiCache para ampliar seus negócios com uma melhor experiência para o cliente, consulte Como os outros usam o Amazon ElastiCache
Assista também aos Vídeos de tutorial para conhecer casos de uso de clientes do ElastiCache adicionais.