Cache de primeiro nível de Mybatis e compreensão de cache de segundo nível

Estrutura da camada de persistência: Mybatis

Mybatis fornece cache de consulta dividido em cache de primeiro nível e cache de segundo nível, que são usados ​​para reduzir a pressão do banco de dados e melhorar o desempenho do banco de dados.

Como funciona o cache de primeiro nível

O cache de primeiro nível é o cache de nível SqlSession

  O cache de consulta de primeiro nível de MyBatis é implementado pelo cache local HashMap da classe org.apache.ibatis.cache.impl.PerpetualCache. Seu escopo é SqlSession e seu escopo é o ciclo de vida. Se executado no mesmo SqlSession no duas consultas de instrução SQL, as posições das duas consultas são diferentes. Na primeira consulta, porque não há resultado em cache, o resultado da consulta é realizado a partir do banco de dados. Após o resultado ser obtido, o resultado é gravado no cache e o o resultado é retornado para a instrução da consulta, E quando a segunda consulta é feita, já existem conjuntos de resultados qualificados no cache. Desta vez, a consulta obterá os resultados no cache e os retornará em vez de consultar o banco de dados. Quando a SqlSession termina, o cache correspondente é destruído. MyBatis é ativado por padrão durante a consulta de primeiro nível e não pode ser desativado.

Como funciona o cache de segundo nível

O cache de segundo nível é diferente do cache de primeiro nível por ser mais poderoso. Seu ciclo de vida é mais longo do que o do cache de primeiro nível. O ciclo de vida do cache de segundo nível é sincronizado com todo o aplicativo , vivendo e morrendo com o aplicativo. Neste momento, o cache de segundo nível O cache não tem nada a ver com SqlSession. Isso é do ciclo de vida dos dois, além de suas finalidades diferentes, o cache de primeiro nível é usado para compartilhar dados para melhorar a velocidade e eficiência, enquanto o cache de segundo nível é para estender os resultados da consulta Economize tempo, melhorando assim desempenho do sistema, o cache de segundo nível também pode ser usado para compartilhar dados. 
       O cache de segundo nível está embutido em myBatis, e sua classe de implementação é org.apache.ibatis.cache.impl.PerpetualCache, e a classe de entidade precisa implementar a interface de serialização ao usá-la. há também um ehcache, que é relativo a Este é profissional em termos de cache embutido e é mais conveniente de usar.

O cache secundário de mybatis está no nível do intervalo do mapeador. Defina a chave geral do cache secundário em sqlMapperConfig e ative o cache secundário no mapeador específico.

sqlSession1 consulta as informações do usuário cujo id de usuário é 1 e armazena os dados da consulta no cache secundário quando as informações do usuário são consultadas.

sqlSession2 consulta as informações do usuário com o id de usuário 1, para descobrir se há dados no cache e, se existirem, busca diretamente os dados do cache.

 

a diferença:
 

O cache de segundo nível é diferente do cache de primeiro nível.O cache de segundo nível tem um escopo maior, porque várias sqlSessions podem compartilhar a mesma área de cache de segundo nível.

UserMapper tem uma área de cache secundária (diferenciada por namespace), e outros mapeadores (diferenciados por namespace) também têm sua própria área de cache secundária

Cada mapeador de namespace possui uma área de cache de segundo nível. Se os namespaces de dois mapeadores forem iguais, os dados consultados pelos dois mapeadores executando SQL serão armazenados na mesma área de cache de segundo nível.

Atributos importantes no
cache Desabilitar o cache de segundo nível A
configuração de useCachefalse na instrução pode desabilitar o cache de segundo nível da instrução select atual, ou seja, cada consulta emitirá SQL para consultar, o padrão é verdadeiro, ou seja, o SQL usa o cache de segundo nível.

<select id = ”findUserById” resultMap = ”BaseResultMap” useCache = ”false”>

Resumo: para cada consulta, os dados mais recentes são necessários e precisam ser configurados para useCache = ”false” para desabilitar o cache de segundo nível

Atualizar o cache (ou seja, limpar o cache)
Se houver outras operações de inserção, atualização e exclusão no mesmo namespace do mapeador, o cache precisará ser atualizado. Se você não atualizar o cache, ocorrerão leituras sujas.

Defina o atributo flushCache = ”true” na configuração da instrução. Por padrão, é verdadeiro para atualizar o cache e, se for alterado para falso, não será atualizado. Ao usar o cache, se você modificar manualmente os dados da consulta na tabela do banco de dados, ocorrerão leituras sujas.
 

Cenários de aplicação de cache secundário

Dados raramente modificados

Dados não muito importantes, permitindo dados simultâneos ocasionais

Dados que não serão acessados ​​simultaneamente

Plug-ins de cache comumente usados

EhCache: Pode ser usado como cache de todo o processo.O meio físico para armazenar dados pode ser memória ou disco rígido, que fornece suporte para cache de consulta do Hibernate.

redis: é um sistema de armazenamento de valores-chave. Semelhante ao Memcached, ele suporta relativamente mais tipos de valor para armazenamento, incluindo string (string), lista (lista vinculada), conjunto (coleção), zset (conjunto classificado - coleção ordenada) e hash (tipo de hash)

 

Os cenários de aplicação típicos de cache distribuído podem ser divididos nas seguintes categorias:
. Cache de página Ele é usado para armazenar em cache os fragmentos de conteúdo de páginas da Web, incluindo HTML, CSS e imagens, etc., que são utilizados principalmente em sites de redes sociais.
Aplicação cache de objetos. O sistema de cache é usado como uma estrutura ORM. O cache de segundo nível fornece serviços para o mundo externo com o objetivo de reduzir a pressão de carga do banco de dados e acelerar o acesso do aplicativo;
cache de estado. O cache inclui o estado da sessão de sessão e estado de dados quando o aplicativo é dimensionado. Este tipo de dados geralmente é difícil de recuperar e requer disponibilidade. Alto, usado principalmente em clusters de alta disponibilidade;
processamento paralelo. Geralmente envolve um grande número de resultados de cálculo intermediários que precisam ser compartilhados;
processamento de eventos. O cache distribuído fornece tecnologia de processamento de consulta contínua para fluxos de eventos para atender aos requisitos em tempo real;
processamento de transações extremas. O cache distribuído fornece soluções de alto rendimento e baixa latência para aplicativos transacionais, suporta processamento de alta solicitação de transações simultâneas e é usado principalmente em ferrovias , serviços financeiros e telecomunicações.

Acho que você gosta

Origin blog.csdn.net/A___B___C/article/details/83717288
Recomendado
Clasificación