Dados essenciaisE-commerce

Vendas relâmpago e estoque

Venda exatamente o estoque que você tem quando dez mil clientes clicam em Comprar no mesmo segundo, e mantenha os bots de fora.

decremento do estoque
Atômico
unidades vendidas a mais
0
reservas que se liberam sozinhas
10 min
Etapa 1 de 6
Carregue o estoque

500 unidades entram em promoção.

Sessão de exemploplaying
# Carregue o estoque
hotkv> SET stock:sneaker-x 500
OK

Uma demonstração animada com comandos reais do HotKV e respostas de exemplo. Clique em qualquer etapa para ir direto a ela. Os comandos e as respostas ficam em inglês, exatamente como você os digita e vê no HotKV.

O problema

Em uma venda relâmpago, o banco de dados de estoque vira o gargalo exatamente quando mais importa. Verificações de ler e depois gravar vendem a mais sob concorrência, carrinhos abandonados prendem o estoque para sempre e os bots compram o estoque antes que os clientes reais terminem de carregar a página.

Como o HotKV resolve

O estoque fica em um contador decrementado de forma atômica, então compradores simultâneos nunca levam mais do que existe. Cada reserva é uma chave com expiração de dez minutos, um limite de taxa por cliente segura os bots e os pedidos confirmados vão para um stream que o setor de envio processa no próprio ritmo.

Passo a passo

O que acontece, comando por comando

  1. 01

    Carregue o estoque

    500 unidades entram em promoção.

    SET stock:sneaker-x 500
  2. 02

    Mantenha os bots sob controle

    Cada cliente pode tentar duas vezes a cada 10 segundos. Os bots passam disso na hora.

    GCRA.LIMIT buy:customer:881 10000 2
  3. 03

    Pegue uma unidade

    DECR é atômico. 10.000 cliques simultâneos nunca levam mais do que 500 unidades.

    DECR stock:sneaker-x
  4. 04

    Reserve por dez minutos

    A reserva expira sozinha se o checkout for abandonado, e uma rotina de limpeza devolve a unidade.

    SET hold:sneaker-x:order-7781 customer:42 NX EX 600
  5. 05

    O esgotamento é tratado

    Quando o DECR fica abaixo de zero, a unidade é devolvida e o cliente vê que esgotou. O estoque nunca fica negativo por muito tempo.

    INCR stock:sneaker-x
  6. 06

    Passe os pedidos para o envio

    Os pedidos pagos são anexados a um stream. O sistema do armazém os processa no próprio ritmo.

    XADD orders * order 7781 sku sneaker-x customer 42
Onde se encaixa

Cenários reais

Lançamentos de tênis e produtos

As edições limitadas se esgotam em segundos sem vender um único par a mais.

Venda de ingressos

Os assentos ficam reservados por alguns minutos durante o checkout e são liberados automaticamente se o comprador sair.

Delivery de comida e mercado

Os horários de entrega são contadores, decrementados de forma atômica conforme os clientes os reservam.

Integrado

O que você ganha

Contadores atômicos

DECR e INCR mudam o estoque em uma etapa, sem condição de corrida.

DECRINCRBY

Reservas que expiram

As reservas são chaves com um TTL.

SETNXEX

Proteção contra bots

Limites por cliente com um tempo exato para tentar de novo.

GCRA.LIMIT

Repasse de pedidos

Um stream para o envio, com grupos de consumidores e confirmações.

XADDXREADGROUP

Perguntas frequentes

Como as reservas expiradas devolvem o estoque?

As reservas expiradas podem ser percebidas por notificações de keyspace ou por uma varredura periódica, que incrementa o contador de estoque de novo.

Posso consultar o estoque sem pegá-lo?

Sim. GET retorna a contagem atual. Só o DECR reserva.

E carrinhos com vários itens?

Use MULTI e EXEC, ou uma função, para decrementar vários contadores juntos.

Casos de uso relacionados

Experimente com a sua própria carga de trabalho

O HotKV fala o protocolo Redis, então você pode apontar um cliente existente para ele e executar estes mesmos comandos.