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

Como as chaves do redis expiram?


Resumindo - para cada objeto redis, há um tempo de expiração. A menos que você defina o objeto para expirar, esse tempo é "nunca".

Agora, o próprio mecanismo de expiração é semi-preguiçoso. A expiração lenta significa que você não expira os objetos até que eles sejam lidos. Ao ler um objeto, verificamos seu carimbo de data/hora de expiração e, se estiver no passado, não retornamos nada e excluímos o objeto enquanto estamos nele. Mas o problema é que, se uma tecla nunca for tocada, ela apenas ocupará memória sem motivo.

Portanto, o Redis adiciona uma segunda camada de expiração ativa aleatória. Ele apenas lê chaves aleatórias o tempo todo e, quando uma chave expirada é tocada, ela é excluída com base no mecanismo lento. Isso não afeta o comportamento de expiração, apenas adiciona "coleta de lixo" de chaves expiradas.

É claro que a implementação real é mais complicada do que isso, mas essa é a ideia principal.

Você pode ler mais sobre isso aqui:http://redis.io/commands/expire

E o código-fonte para o ciclo de expiração ativo pode ser encontrado aqui:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98