Ao realizar certas operações cronometradas, precisamos de feedback sobre os resultados. Por exemplo, pedidos são automaticamente excluídos após o vencimento, pedidos são automaticamente elogiados após alguns dias, pedidos não pagos são fechados após 15 minutos, etc., o que pode ser concluído usando alguns frameworks de tarefas temporizadas ou métodos de polling. Este artigo utiliza o mecanismo avançado de notificação de eventos de expiração do cache do Redis combinado com código .NET/C# para cumprir requisitos de negócio.
Introdução
Cenários de uso: 1. No negócio de pagamentos, ordens não pagas são encerradas automaticamente 2. Lembretes de expiração do cache
Em geral, podemos usar o serviço de temporização para processar o fechamento automático de ordens não pagas, como chamar a interface a cada minuto para processar pedidos não pagos e expirados, mas nesse caso, isso consumirá desempenho do computador, mesmo que não haja pedido, será processado a cada minuto, e o atraso máximo do tempo de processamento do pedido será de 59s, e o serviço de cronometragem deve estar sempre disponível
Então, o que queremos fazer? Só quando houver pedidos não pagos e expirados com processamento de baixa latência, podemos usar o mecanismo de expiração do cache do Rendis para empurrar a assinatura.
Assinatura Redis
Modificar o notify-keyspace-events Ex no arquivo de configuração redis.conf
Para economizar recursos da coça, as notificações de eventos não são ativadas por padrão, e o padrão é notify-keyspace-events
# Notificação de espaço de teclas K, <db>prefixado com __keyspace@__ # Notificação de evento da chave E, <db>prefixada com __keysevent@__ # g del, expipre, renomear e outros tipos de comandos genéricos, ... # $string comando # Comando l List #s Comando Set # h Comando Hash # Comando Z Ordem Set # x Evento de expiração (gerado toda vez que uma chave expira) # Evento de despejo E (gerado quando a chave é limpa quando a memória está cheia) # Um pseudônimo g$lshzxe, então "AKE" significa todos os eventos
Notify-keyspace-events "KX" indica que você quer monitorar eventos de invalidação para uma chave. Definir o parâmetro para a string AKE significa enviar todos os tipos de notificações.
Instalei o Redis como um serviço na minha máquina, modifiquei o arquivo de configuração redis.windows.conf e precisei reiniciar a configuração do serviço do Redis para entrar em vigor.
Exemplo de código .NET/C#
O pacote é o seguinte:
invocar
Vamos tentar escrever um cache com redis-cli.
Na verdade, você também pode assinar notificações de expiração do cache executando o seguinte comando via redis-cli:
Quando N clientes assinam notificações de eventos de expiração em cache, o Redis notificará N usuários sobre a mesma mensagem de expiração, não apenas um dos clientes, como mostrado na figura abaixo:
Código fonte C# para download:
https://down.itsvse.com/item/17856.html
resumo
O pub/sub do Redis é um mecanismo de mensagens pouco confiável, não armazena informações, só encaminha online, e definitivamente não existe um mecanismo de confirmação de ACK, e apenas o segmento de assinaturas será encaminhado, então o Keyspace Notifications também é um sistema de notificações pouco confiável; se nosso negócio precisa de boa confiabilidade, essa não é a melhor escolha. De modo geral, recomendamos o DLX (Dead-Letter-Exchange) do RabbitMQ para implementá-lo, que é a função de fila atrasada. É só que a solução do Redis é mais fácil de implementar e menos cara de operar. Ainda assim, é muito conveniente para empresas que não exigem alta confiabilidade. |