Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

como manter o cache atualizado


Como você está usando um cache, você precisa tolerar o problema de inconsistência de dados , ou seja, em algum momento, os dados em cache são diferentes dos dados no banco de dados.

Você não precisa atualizar o valor no cache, sempre que o valor for alterado. Caso contrário, todo o sistema de cache será muito complicado (por exemplo, você precisa manter uma lista de chaves que foram armazenadas em cache), e também pode ser desnecessário fazer isso (por exemplo, o valor-chave pode ser usado apenas uma vez e não há para atualizá-lo mais).

Como podemos atualizar os dados em cache e manter o sistema de cache simples?

Normalmente, além de definir ou atualizar um par de valores-chave no cache, também definimos um TIMEOUT para cada chave . Depois disso, o cliente pode obter o par chave-valor do cache. No entanto, se uma chave atingir o tempo limite, o sistema de cache removerá o par chave-valor do cache. Isso se chama THE KEY HAS BEEN EXPIRED . Na próxima vez, o cliente que tentar obter essa chave do cache não obterá nada. Isso é chamado de CACHE MISS . Nesse caso, o cliente precisa obter o par chave-valor do banco de dados e atualizá-lo para o cache com um novo tempo limite.

Se os dados foram atualizados no banco de dados, enquanto a chave NÃO tiver expirado no cache, o cliente obterá dados inconsistentes. No entanto, quando a chave expirar, seu valor será recuperado do banco de dados e inserido no cache por algum cliente. Depois disso, outros clientes receberão dados atualizados até que os dados sejam alterados novamente.

Como definir o tempo limite?

Normalmente, há dois tipos de política de expiração:
  1. Expira em N segundos/minutos/horas...
  2. Expira em algum momento futuro, por exemplo expira em 30/07/2017 00:00:00

Um tempo limite grande pode reduzir bastante a carga do banco de dados, enquanto os dados podem ficar desatualizados por um longo tempo. Um pequeno tempo limite pode manter os dados atualizados o máximo possível, enquanto o banco de dados terá uma carga pesada. Portanto, você precisa equilibrar a compensação ao projetar o tempo limite .

Como as chaves do Redis expiram?

O Redis tem duas maneiras de expirar as chaves:
  1. Quando o cliente tenta operar em uma chave, o Redis verifica se a chave atingiu o tempo limite. Se isso acontecer, o Redis remove a chave e age como se a chave não existisse. Dessa forma, o Redis garante que o cliente não receba dados expirados.
  2. O Redis também tem um thread de expiração que faz amostras de chaves em uma frequência configurada. Se as chaves atingirem o tempo limite, o Redis as removerá. Dessa forma, o Redis pode acelerar o processo de expiração da chave.