memcache REDIS politiques mysql d'expiration et le contraste de mécanisme d'élimination de la mémoire

memcache et Redis comme cache chaud de nos jours, bien sûr, des projets hautement concurrents doivent être utilisés, et le processus d'utilisation de débordement de mémoire est inévitable, récemment lu beaucoup d'informations à trier l'article, en même temps d'être un résumé détaillé et la comparaison de MySQL.

Lorsque la mémoire est pas plein

  • memcache
    1.4.25 et versions antérieures inertes suppression mécanisme, ne nettoyage pas automatiquement, page une fois attribué avant le redémarrage ne sera pas recyclé ou réaffectés jusqu'à ce que la visite n'a été trouvée élément a expiré ne sont pas supprimés.
    Après la version intervalle de temps spécifié sera de savoir s'il y a un objet en retard, s'il y aura expiré processus de suppression.

  • REDIS
    appeler régulièrement les déclencheurs de fonction databasesCron () de nettoyage , la fréquence de hz est déterminée par les paramètres dans le fichier de configuration, représente une seconde, le nombre de tâches d'arrière - plan est appelée, elle est généralement effectuée une fois 100ms, tout en établissant une valeur de seuil, par exemple 25% lorsque les données extraites de plus de 25 100 arrive à expiration, continuent de le prendre après le nettoyage, à moins de 25 si les 100ms du sommeil.

    Pour éviter Redis occupation, pour une durée maximale pour chaque tâche effectuée sur il une limite, assurant ainsi que toute initiative visant à éliminer l'application de blocage excessif ne le demande, je dois dire que cela est une bonne solution.

débordement de mémoire

  • memcache
    lorsque memcache mémoire totale a atteint les paramètres de mémoire maximum, la dalle peut être utilisée pour représenter l' ensemble de la page ont été fixés, alors s'il y a des données dans, conduiront à memcache utiliser la stratégie MRU données culling. Ici , la politique LRU n'est pas dirigée contre toutes les dalles, mais seulement pour les nouvelles données doivent être placées dans la dalle, non pas au nom de l'apparition de la surcharge LRU memcache.
    Lorsque vous taille de bloc de réglage du temps déraisonnable, comme slab20 taille du morceau est très grande, a commencé à prendre beaucoup de mémoire, mais si oui ou non expiré, ne pas être utilisé à nouveau quand il a été dans la mémoire, de sorte que lorsqu'une relativement faible slab1 le morceau est pleine, aucune nouvelle dalle et la segmentation de la mémoire et slab1 mêmes spécifications que le morceau de temps, memcache commenceront LRU, pour nettoyer les données sous la dalle. Cette situation se traduira par la mémoire d' une grande perte et le taux de succès a chuté , voir mon autre blog « principe de stockage de memcache et le taux de succès » .
    MRU principe est basé sur le temps d'accès à clé dans une liste chaînée, constamment mis à jour, de sorte que la queue est la plus longue période sans utilisation.

  • Redis
    (1) la LRU volatile: le délai d'expiration défini de l'ensemble de données de sélection de phase sur les données le moins récemment utilisées.

    (2)-ttl volatile: à partir d'un temps d'expiration de consigne de la sélection de l'ensemble de données d'expirer données éliminés.

    (3)-aléatoire volatile: le délai d'expiration a été fixée arbitrairement des données sélectionnées sur l'ensemble de données.

    (4)-LFU volatile: choisir un temps d'expiration de l'ensemble de l'ensemble de données à utiliser les données de fréquence la plus basse éliminée.

    (5) AllKeys-LRU: les données à partir des données de consigne sélectionnée sur le moins récemment utilisé

    (6) AllKeys-LFU: récupérer à partir de l'ensemble de données pour utiliser les données de fréquences plus basses éliminés.

    (7) AllKeys-aléatoire à: sélectionner des données à partir du jeu de données (server.db [i] .dict) toute

    (8) non-enviction (expulsion): interdit les données d'expulsion, ce qui est la règle par défaut. Lorsque les moyens de mémoire est insuffisante pour accueillir les nouvelles données, la nouvelle opération d'écriture sera donnée, la demande peut procéder tâche de ligne ne peut se poursuivre, en utilisant la politique de non-enviction peut garantir que les données ne sont pas perdues.

Notez que ce processus de nettoyage est bloqué jusqu'à ce que l' espace mémoire assez effacé. Donc , si dans le cas où l'appelant a atteint MaxMemory et écrit en permanence, il peut déclencher à plusieurs reprises l'initiative de nettoyer la stratégie, ce qui conduit à la demande , il y aura des retards.

  • MySQL
    a demandé mysql ont une mémoire hors de lui? Bien sûr, le jeu de résultats peut être mis en cache requête MySQL, mais cela est insipide, car une fois que les ajouts et les suppressions à une ligne sur la miss ensemble du cache de table, le cache est comparé aux résultats intermédiaires du serveur SQL sans paramètres, ce qui correspond à déclaration de procédure stockée MySQL, mais ils ont en commun des apparitions chronologiquement antérieures éliminés .
    mysql matériel très rapide est le pool de mémoire tampon mécanisme d'élimination, est généré au cours des tables temporaires de requête et d' autres données, et parce que memcache et Redis pas les mêmes, les données de MySQL est la page de lecture page par page, pas toute utilisation à , de sorte que la référence GC Java mécanisme de collecte des ordures, les données mises en cache dans la nouvelle génération et l'ancienne génération, l' utilisation des données dans la tête de l'ancienne génération, jusqu'à un certain temps pour mettre dans la nouvelle génération, ce qui empêche efficacement lecture de grandes quantités simultanée de données à l'original les données thermiques de nettoyage la situation.
Publié cinq articles originaux · louanges gagnées 0 · Vues 76

Je suppose que tu aimes

Origine blog.csdn.net/jy615183000/article/details/105334830
conseillé
Classement