Puisque vous utilisez un cache, vous devez tolérer le problème d'incohérence des données , c'est-à-dire qu'à un moment donné, les données du cache sont différentes des données de la base de données.
Vous n'avez pas besoin de mettre à jour la valeur dans le cache, chaque fois que la valeur a été modifiée. Sinon, l'ensemble du système de cache sera très compliqué (par exemple, vous devez maintenir une liste de clés qui ont été mises en cache), et il peut également être inutile de le faire (par exemple, la valeur-clé peut être utilisée une seule fois, et pas besoin pour le mettre à jour plus).
Comment pouvons-nous mettre à jour les données en cache et garder le système de cache simple ?
Normalement, en plus de définir ou de mettre à jour une paire clé-valeur dans le cache, nous définissons également un TIMEOUT
pour chaque clé . Après cela, le client peut obtenir la paire clé-valeur à partir du cache. Cependant, si une clé atteint le délai d'expiration, le système de cache supprime la paire clé-valeur du cache. Cela s'appelle THE KEY HAS BEEN EXPIRED
. La prochaine fois, le client essayant d'obtenir cette clé du cache n'obtiendra rien. Cela s'appelle CACHE MISS
. Dans ce cas, le client doit obtenir la paire clé-valeur de la base de données et la mettre à jour dans le cache avec un nouveau délai d'expiration.
Si les données ont été mises à jour dans la base de données, alors que la clé n'a PAS expiré dans le cache, le client obtiendra des données incohérentes. Cependant, lorsque la clé a expiré, sa valeur sera extraite de la base de données et insérée dans le cache par un client. Après cela, les autres clients recevront des données mises à jour jusqu'à ce que les données soient à nouveau modifiées.
Comment définir le délai d'attente ?
Normalement, il existe deux types de règles d'expiration :
- Expire dans
N
secondes/minutes/heures... - Expire à un moment futur, par ex. expire le 2017/7/30 00:00:00
Un délai d'attente important peut réduire considérablement la charge de la base de données, tandis que les données peuvent être obsolètes pendant une longue période. Un petit délai peut maintenir les données à jour autant que possible, tandis que la base de données aura une lourde charge. Donc vous devez équilibrer le compromis lors de la conception du délai d'attente .
Comment Redis expire-t-il les clés ?
Redis a deux façons de faire expirer les clés :
- Lorsque le client essaie d'opérer sur une clé, Redis vérifie si la clé a atteint le délai d'expiration. Si c'est le cas, Redis supprime la clé et agit comme si la clé n'existait pas. De cette manière, Redis s'assure que le client ne reçoit pas de données expirées.
- Redis dispose également d'un thread d'expiration qui échantillonne les clés à une fréquence configurée. Si les clés atteignent le délai d'expiration, Redis supprime ces clés. De cette manière, Redis peut accélérer le processus d'expiration de la clé.