Bloqueio otimista versus pessimista no cache
A necessidade de Locking surge sempre que há recursos compartilhados em seu ambiente. Recursos compartilhados por mais de um usuário podem causar inconsistência de dados. Problemas como esses podem ser melhor resolvidos com Locking. Usando o mecanismo de bloqueio, o conjunto de dados críticos torna-se tolerante a falhas, resultando em fornecer ao usuário atomicidade, consistência e isolamento.
Note
Este recurso também está disponível em NCache Professional.
NCache fornece um mecanismo de bloqueio eficiente para sincronização e integridade de dados no armazenamento de cache sendo atualizado por diferentes clientes paralelos. NCache o bloqueio interno garante a consistência dos dados em todo o cluster de cache para cada atualização dos mesmos dados. Adicionalmente, NCache fornece API para bloquear dados de cache específicos, para que apenas um único thread ou aplicativo possa atualizá-los ou lê-los.
Quando usar o bloqueio
Problema Declaração
Considere um cenário em que existe uma conta bancária única usada por dois titulares de contas. A conta possui um saldo de $ 5000. O usuário 1 deseja sacar $ 2000 da conta e o usuário 2 deseja depositar $ 1000 na conta. Considerando as condições dadas, o saldo da conta após a realização destas operações deve ser de $ 4000 (5000-2000 = 3000 e 3000 + 1000 = 4000).
Agora vamos considerar que ambos os usuários desejam realizar esta operação na conta ao mesmo tempo e como não há um tratamento adequado para o cenário, acontece o seguinte:
O usuário 1 verifica o saldo da conta e mostra $ 5000. Ele saca $ 2000 e o saldo total passa a $ 3000.
O usuário 2 verifica o saldo da conta e mostra $ 5000. Ele deposita $ 1000 e o saldo total passa a ser $ 6000.
O diagrama a seguir descreve o cenário visualmente.
Solução
Para resolver esse problema de recursos compartilhados, você pode usar duas abordagens.
A primeira abordagem é bloquear a conta bancária para qualquer operação adicional quando um usuário já estiver realizando qualquer tipo de operação nela.
A segunda abordagem é usar um mecanismo onde uma conta bancária é aberta para uso por ambos os usuários, mas a versão da conta bancária é atualizada em relação ao horário atual de cada operação realizada. Desta forma a nova versão estará disponível para as operações do usuário.
NCache fornece ambos os mecanismos de bloqueio conhecidos como bloqueio pessimista e otimista. Eles são explicados mais detalhadamente em capítulos sucessivos.
Tipos: bloqueio otimista vs pessimista
Existem dois tipos de bloqueio disponíveis com NCache:
Bloqueio Pessimista (Bloqueio Exclusivo)
O Bloqueio Pessimista é um mecanismo onde um item é bloqueado exclusivamente usando umLockHandle
devido ao qual o item permanece inacessível para outros usuários enquanto estiver bloqueado.Bloqueio Otimista (versionamento de item de cache)
O Bloqueio Otimista é um mecanismo onde o controle de versão de item é usado para bloquear um item. Usando esse mecanismo, um item é aberto para uso por outro usuário, mas a cada operação realizada em um item, a versão do item é atualizada.
Veja também
.INTERNET: Alachisoft.NCache.Runtime.Cache espaço para nome.
Java: com.alachisoft.ncache.runtime.caching espaço para nome.
Node.js: Esconderijo classe.
Pitão: ncache.runtime.caching classe.