étude Redis [8] Résumé de la question

A, les délais d'expiration des données Redis et la politique de collecte des ordures


     Redis a expiré pour l'utilisation des données et des tactiques de retard périodiquement suppression de suppression obligatoire, mais les deux ont des inconvénients, en raison de l'inspection périodique de toutes les clés a expiré causera des problèmes de performance, la politique de suppression de façon régulière à l' aide d' un échantillon aléatoire, en fonctionnement clé déterminera si l'ancien a expiré, comme expiré immédiatement supprimé, cette stratégie conduira à une partie de la clé a expiré accumule également en mémoire, de sorte que l'utilisation de la mémoire du serveur Redis est élevé, et nécessite donc une combinaison de maxmemory- redis.conf politique configuré pour utiliser, lorsque la mémoire est récupérée lorsque Redis stratégie de serveur mémoire est insuffisante pour écrire de nouvelles données,
# noeviction 1: représente une erreur directe;.
# 2-LUR AllKeys: des moyens pour supprimer toutes les clés de la clé conformément à la LRU;
# 3 AllKeys. -Random: représente la clé de suppression aléatoire dans toutes les clés;
# 4 volatile la LRU / aléatoire volatile /-ttl volatile est utilisé lorsque Redis serveur agit à la fois comme un cache et que DB, exprimé dans un jeu de clés date d' expiration pour la suppression , représente ttl la touche de suppression a expiré plus tôt.

 

En second lieu, la solution de pénétration cache Redis et cache des problèmes avalanche


     la pénétration du cache et des avalanches peuvent être considérés comme un problème, mais divers degrés de gravité, lorsqu'une demande arrive Redis trouvé aucune donnée de cache correspondant, puis envoyer la demande de données DB, si nous pouvons obtenir au problème des données demeureraient dans la pénétration du cache sur DB les données acquises sont mises en cache sur Redis, s'il n'y a pas de données DB correspondant, et lorsqu'une telle demande atteint une certaine ampleur et la consommation totale de toutes les ressources DB, entraînant une anomalie de connexion DB se pose cache des problèmes avalanche .
idées de cache pour résoudre le problème de pénétration disponible dans ce qui suit, que ce soit du DB pour trouver la valeur correspondante (aucune valeur sur le comme nulle), sont enregistrées dans un cache Redis enregistrement, dans la couche Dao maintient une BitMap, avec un peu si l' enregistrement de la clé correspondante a une valeur correspondant, de manière à éviter l' opération de DB redondant; fil de fond dédié à la mise à jour de données Redis est sur le point d'expirer, ce qui évite la pénétration du cache.
Avalanche idées pour résoudre le cache de problème disponible dans ce qui suit, est ajouté dans la connexion DB mutex, de sorte que lorsqu'un grand nombre d'échec de demande de cache aux demandes de file d'attente aux données DB, un ensemble de données sont fournies avec la même expiration d'une valeur de temps aléatoire, afin d' éviter données de défaillance collective, soit le double tampon ou une mise en cache des stratégies multiples doivent répondre le réchauffement du cache.

 

2.1 Qu'est-ce que le cache avalanche?

Si le cache est concentré sur une période de temps a expiré, beaucoup de pénétration du cache se produit, toutes les requêtes tombent sur la base de données, ce qui entraîne dans une cache avalanche

Depuis l'invalidation du cache d'origine, le nouveau cache encore atteint toutes les demandes d'accès au cache au cours de laquelle devrait aller interroger la base de données, alors que la base de données énorme pression sur le processeur et la mémoire, peut provoquer des temps d'arrêt de la base de données sérieuse

2.2), quelle est la solution pour éviter la mise en cache avalanche?

1) la file d'attente de verrouillage

mutex mutex à résoudre, Redis de SETNX pour définir une clé de mutex, lors du retour de l'opération avec succès, avant de procéder à charger la base de données et à l'arrière dans le cache, sinon, vous obtenez toute méthode nouvelle tentative de cache

2) Préchauffez données

Après préchauffage de la ligne de cache est sur le système, les données pertinentes sont directement chargées dans le système de mémoire tampon de cache. Cela peut être évité lorsque les demandes des utilisateurs, la première requête de la base de données, puis les problèmes de cache de données. Les utilisateurs d'interroger les données de cache directement été préalablement préchauffé. À travers le mécanisme de rechargement du cache, de mettre à jour le cache à l'avance, avant le grand accès simultané imminente pour déclencher manuellement une charge différente de la clé de cache

3) Politique de mise en cache double

Le cache C1 original, C2 est une copie du cache, lorsque C1 échoue, vous pouvez visiter C2, le temps d'expiration du cache C1 est à court terme ensemble, C2 est fixé pour le long terme

4) mettre à jour régulièrement la politique de cache

Efficacité du cache moins exigeant, le chargement démarre le conteneur d'initialisation ou de supprimer une tâche chronométré met à jour le cache

5) Régler le temps d'expiration différent pour le moment d'un défaut de cache aussi uniforme que possible

 

En troisième lieu, la répartition du cache

1) Quel est le cache de répartition?

Dans les systèmes concurrents habituels, le grand nombre de requêtes simultanément interroger une clé, la clé à ce moment échoue juste, cela conduira à un grand nombre de demandes de frapper la base de données ci-dessus. Ce phénomène nous répartition du cache d'appel

2), apporterait des problèmes

Cause des demandes de base de données excessive à un moment, augmentation de la pression

3) comment résoudre

Le phénomène ci-dessus est plusieurs threads pour rechercher ces données dans la base de données, nous pouvons utiliser un mutex sur les données de la première demande de requête pour le verrouiller

D'autres sujets sont loin cela peut ne pas avoir une attente de verrouillage, le classement d'un fil pour interroger les données et faire le cache. Les fils viennent cache arrière a été trouvé, et aller directement au cache

 

Quatrièmement, la pénétration du cache

1) Quel est le cache de pénétrer?

la pénétration du cache fait référence aux données de requête de l'utilisateur, et non dans une base de données, naturellement il n'y aura pas dans le cache. Il en résulte la requête de l'utilisateur lorsque la touche correspondante ne figure pas dans le cache de la valeur, chaque fois à nouveau la requête à nouveau la base de données, puis reviennent à vide (l'équivalent de deux enquêtes inutiles effectué). Ces demandes contournent le cache base de données d'accès direct

2) Quelles sont les solutions pour empêcher la pénétration mise en cache?

1) La valeur null Cache

Si une requête renvoie les données sont vides (données non si, ou une défaillance du système existe), nous voyons toujours les résultats de cache vides, mais son temps d'expiration sera très court, pas plus de cinq minutes. Stockés par défaut pour ce paramètre dans le cache, de sorte que la deuxième fois pour y arriver est la valeur dans le cache, mais ne continuera pas à accéder à la base de données

2) en utilisant des filtres Bloom filtre de bloom

Avantages: faible empreinte mémoire, le stockage de bits, haute performance spéciale, à l'aide de la touche clé de hachage existe ou non est déterminé

Le hachage toutes les données possibles à un assez grand bitmap, il ne doit pas exister ces données bitmap sera bloqué, évitant ainsi la pression des requêtes sur le système de stockage sous-jacent

En ajouter une couche filtre de bloom, allez à la clé de requête filtre de bloom existe dans le cache avant l'heure de la requête, s'il n'y a pas retour direct, il est à nouveau le cache de requête, le cache ne va pas à interroger la base de données

Cinquièmement, plusieurs mode de cache commun

1, Cache Outre

Après avoir appliqué les données de la requête, les données sont lues d'abord à partir du cache cache, le cache sinon, lire les données de la base de données pour obtenir des données dans la base de données, ces données seront placées dans le cache cache

Si l'application que vous souhaitez mettre à jour certaines données, mais aussi d'aller à des données de mise à jour dans la base de données, la mise à jour est terminée, laissez les données via le cache d'instructions cache en échec.

1) Pourquoi ne pas ici pour mettre à jour la base de données après l'arrivée, suivi de cache en cache les données est également modifié?

Principalement parce que de le faire, il y a deux opérations d'écriture de l'événement, et dans le cas de la peur simultanée conduira à des données sales, par exemple: S'il y a deux requêtes simultanées, demande d'exécution de la demande et B, en même temps. Une demande de lecture des données, la demande B va mettre à jour les données. L'état initial du cache a pas de données, lorsqu'une demande de lecture des données A, prêt à remonter le temps de l'écriture, au moment, juste pour la mise à jour demande de données B, après l'expiration de la mise à jour de base de données, se mettre à jour le cache, puis descendez la demande A les données de cache d'écriture est ancienne, et appartient aux données sales

2) Cache en mode A part alors il n'y a pas de problème de données sale?

Il peut également produire des données sales dans les cas extrêmes. Par exemple, alors que deux avec A la demande et l'exécution de la demande de B, en même temps. Une demande de lecture des données, la demande va écrire B. de données Si le cache de l'état initial ne dispose pas de ces données, il demande un cache pas trouvé de données dans la base de données seront lues aux données, lecture cache en écriture différée préparation des données, à ce moment, la demande B va écrire la demande de données après avoir écrit les données dans la base de données B, l'invalidation du cache fourni est allé. Cette fois-ci, la demande parce que le A lire les anciennes données dans la base de données avant, a commencé à écrire des données dans le cache, il est écrit à ce moment pour entrer dans les anciennes données. Ainsi, par la suite, il conduira à des données incohérentes dans les données du cache de la base de données, ce qui dans les données sales

2, lecture / écriture à travers

Les données d'application à lire et les données de mise à jour accèdent directement au service de cache

service de synchronisation de cache pour mettre à jour les données dans la base de données

Une plus faible probabilité de données sale, mais il est fortement mise en cache à charge, les services de mise en cache pour une plus grande exigences de stabilité

3, Ecrire Derrière 模式

Les données d'application à lire et les données de mise à jour accèdent directement au service de cache

Caching Services mise à jour de façon asynchrone des données dans la base de données (via la tâche asynchrone)

La vitesse et l'efficacité est très élevée, mais la cohérence des données est faible, la situation peut avoir des données perdues, pour obtenir une logique plus complexe

Publié 22 articles originaux · a gagné les éloges 9 · vues 8812

Je suppose que tu aimes

Origine blog.csdn.net/ljm_c_bok/article/details/104830069
conseillé
Classement