Em cenários de negócios, operações simultâneas de conteúdo, como inventário de mercadorias, o mesmo arquivo, etc., não são permitidas, e o aplicativo do programa é implantado em múltiplos servidores.
O bloqueio distribuído baseado em zk previamente escrito é o seguinte:
O que você também precisa saber para ler este artigo:
O .NET Core implementa locks distribuídos baseados no RedisO princípio é chamar o comando SETNX de redis, se a chave já existir, o comando SETNX não faz nada. O comando retorna 1 quando a configuração é bem-sucedida e 0 quando a configuração falha.
O login do hiperlink está visível.
Crie um novo projeto de console .NET Core 3.1, adicione uma referência ao StackExchange.Redis e use o comando nuget da seguinte forma:
Chamamos o método StringSet da biblioteca, através do código-fonte StackExchange.Redis, podemos ver que o método StringSet chamará o método privado GetStringSetMessage para executar diferentes comandos de conjunto através do valor de enumeração de quando, o código é o seguinte:
Executamos o comando SETNX 2000 vezes por meio de uma chamada de teste paralela ao programa, que é executada em 2 fases, nas quais a validade do cache da chave é de 5 segundos, ou seja, a chave será liberada automaticamente após 5 segundos, ou seja, o bloqueio será liberado.
O código é o seguinte:
Como você pode ver, um total de 2 inserções bem-sucedidas e 1998 tentativas fracassadas são exatamente o que esperávamos, e as renderizações são as seguintes:
No momento, a fechadura ainda não foi liberada. (Fim)
|