Étapes pour déverrouiller la machine-outil Mitsubishi

L'étape de déverrouillage de l'expiration de la machine-outil Mitsubishi est essentiellement une base de données de mémoire de type valeur-clé, un peu comme memcached. La base de données entière est chargée en mémoire pour son fonctionnement et les données de la base de données sont périodiquement vidées sur le disque dur via des opérations asynchrones à enregistrer.

Puisqu'il s'agit d'une opération de mémoire pure, Redis a d'excellentes performances, peut gérer plus de 100 000 opérations de lecture et d'écriture par seconde et est la base de données de valeurs-clés connue la plus rapide.

L'excellence de Redis n'est pas seulement la performance. Le plus grand charme de Redis est qu'il prend en charge l'enregistrement de plusieurs structures de données. En outre, la limite maximale d'une seule valeur est de 1 Go. Contrairement à memcached, qui ne peut enregistrer que 1 Mo de données, Redis peut être utilisé pour obtenir de nombreuses informations utiles. Fonction.

Par exemple, en utilisant sa liste en tant que liste FIFO doublement liée, pour obtenir un service léger de file d'attente de messages hautes performances, l'utilisation de son ensemble peut être utilisée comme un système de balises hautes performances, etc. En outre, Redis peut également définir le délai d'expiration de la valeur-clé stockée, de sorte qu'il peut également être utilisé comme une version améliorée de memcached.

Le principal inconvénient de Redis est que la capacité de la base de données est limitée par la mémoire physique et ne peut pas être utilisée pour la lecture et l'écriture hautes performances de grandes quantités de données. Par conséquent, les scénarios appropriés de Redis se limitent principalement aux opérations hautes performances et aux opérations avec de petits volumes de données.

3. Quels sont les avantages de l'utilisation de redis?

Vitesse rapide, car les données sont stockées en mémoire, comme HashMap, l'avantage de HashMap est que la complexité temporelle de la recherche et de l'opération est O (1)
Prise en charge des types de données riches, prise en charge de la chaîne, liste, ensemble, ensemble trié,
transaction de support de hachage , opération Tous sont atomiques. La soi-disant atomicité signifie que toutes les modifications apportées aux données sont exécutées ou pas exécutées du tout.
Fonctionnalités riches: peuvent être utilisées pour la mise en cache, les messages et le délai d'expiration est défini par clé. Il sera automatiquement supprimé après l'expiration.
4. redis par rapport à memcached Quels en sont les avantages?

Toutes les valeurs de memcached sont de simples chaînes. Redis, en tant que substitut, prend en charge des types de données plus riches
. Redis est beaucoup plus rapide que memcached. Redis
peut conserver ses données
5. Quelles sont les différences entre Memcache et Redis?

Méthode de stockage Memecache stocke toutes les données dans la mémoire, et il raccroche après la mise hors tension. Les données ne peuvent pas dépasser la taille de la mémoire. Redis est partiellement stocké sur le disque dur, ce qui peut garantir la durabilité des données.
Type de prise en charge des données Memcache prend en charge le type de données est relativement simple. Redis possède des types de données complexes.
Le modèle sous-jacent est différent et l'implémentation sous-jacente et le protocole de communication entre eux sont différents. Redis construit directement le mécanisme VM par lui-même, car le système général perdra un certain temps à se déplacer et à demander s'il appelle la fonction système.
6. Redis les problèmes de performance courants et les solutions:

Le maître écrit un instantané de mémoire et la commande save planifie la fonction rdbSave, qui bloquera le travail du thread principal. Lorsque l'instantané est volumineux, l'impact sur les performances est très important et le service sera suspendu par intermittence, il est donc préférable pour le maître de ne pas écrire un instantané de mémoire.
Persistance AOF maître, si vous ne réécrivez pas le fichier AOF, cette méthode de persistance aura le moindre impact sur les performances, mais le fichier AOF continuera d'augmenter, un fichier AOF trop volumineux affectera la vitesse de récupération du redémarrage maître. Il est préférable que le maître ne fasse aucune persistance, y compris les instantanés de mémoire et les fichiers journaux AOF. En particulier, n'activez pas les instantanés de mémoire pour la persistance. Si les données sont critiques, un esclave ouvre AOF pour sauvegarder les données. La stratégie consiste à synchroniser une fois par seconde.
Le maître appelle BGREWRITEAOF pour réécrire le fichier AOF. AOF occupera une grande quantité de ressources CPU et mémoire pendant la réécriture, entraînant une charge de service élevée et une suspension de service temporaire.
Problèmes de performances de réplication maître-esclave de Redis
, afin de garantir la vitesse de réplication maître-esclave et la stabilité de la connexion, Slave et Master sont les meilleurs dans le même réseau local 7. MySQL a des données de 2000w, seules 20w de données sont stockées dans redis, comment garantir redis Des données sont des données chaudes

Connaissances associées: Lorsque la taille de l'ensemble de données de la mémoire redis atteint une certaine taille, une stratégie d'élimination des données (stratégie de recyclage) sera mise en œuvre.

Redis propose 6 stratégies d'élimination des données:

volatile-lru: sélectionnez les données les moins récemment utilisées dans l'ensemble de données avec le délai d'expiration défini (server.db [i] .expires) Éliminez
volatile-ttl: sélectionnez dans l'ensemble de données avec le délai d'expiration défini (server.db [i]). Sélectionnez les données expirées pour éliminer les données qui expireront
volatile-aléatoire: sélectionnez arbitrairement les données de l'ensemble de données (server.db [i] .expires) avec le délai d'expiration défini
allkeys-lru: supprimez les données de l'ensemble de données (server.db [i] .dict) Sélectionnez les données les moins récemment utilisées pour éliminer toutes les
clés aléatoires: sélectionnez arbitrairement les données de l'ensemble de données (server.db [i] .dict) pour éliminer la
non-enviction (expulsion): interdisez l'expulsion des données
8. Veuillez utiliser Redis et tout La langue implémente un code de protection contre les connexions malveillantes, qui limite chaque ID utilisateur à se connecter jusqu'à 5 fois en 1 heure. La fonction ou la fonction de connexion spécifique peut être une fonction vide, sans écrire en détail.

Réalisez avec une liste: chaque élément de la liste représente l'heure de connexion, tant que la différence entre la dernière 5ème heure de connexion et l'heure actuelle ne dépasse pas 1 heure, la connexion est interdite. Le code écrit en Python est le suivant:

#! / usr / bin / env python3
import redis
import sys
import time

r = redis.StrictRedis (hôte = '127.0.0.1 ′, port = 6379, db = 0)
essayez:
id = sys.argv [1]
sauf:
print (' erreur d'argument d'entrée ')
sys.exit (0)

si r.llen (id)> = 5 et time.time () - float (r.lindex (id, 4)) <= 3600:
print («il vous est interdit de vous connecter»)
else:
print ('vous êtes autorisé à login ')
r.lpush (id, time.time ())

login_func ()

9. Pourquoi redis doit-il mettre toutes les données en mémoire?

Afin d'atteindre la vitesse de lecture et d'écriture la plus rapide, Redis lit les données dans la mémoire et écrit les données sur le disque de manière asynchrone. Redis a donc les caractéristiques de persistance rapide et de données. Si vous ne mettez pas les données en mémoire, la vitesse d'E / S du disque affectera sérieusement les performances de redis. Aujourd'hui, la mémoire devenant moins chère, les redis deviendront de plus en plus populaires.

Si la mémoire maximale utilisée est définie, de nouvelles données ne peuvent pas être insérées après que le nombre d'enregistrements de données a atteint la limite de mémoire.

10. Redis est un processus unique à filetage unique

Redis utilise la technologie de file d'attente pour convertir l'accès simultané en accès série, éliminant ainsi la surcharge du contrôle série de base de données traditionnel

11. Comment résoudre le problème de la concurrence concurrente de redis?

Redis est un mode monothread à processus unique, utilisant le mode file d'attente pour modifier l'accès simultané à l'accès série. Redis lui-même n'a pas le concept de verrous. Redis n'a pas de concurrence pour plusieurs connexions client, mais lorsque le client Jedis effectue un accès simultané à Redis, des problèmes tels que le délai de connexion, les erreurs de conversion de données, le blocage et la fermeture des connexions client se produisent. Ils sont tous causés par des connexions client chaotiques.

Il y a 2 solutions à cela:

1. Du point de vue du client, afin d'assurer la communication normale et ordonnée entre chaque client et Redis, la connexion est mise en commun et la synchronisation de verrouillage interne est utilisée pour les opérations Redis de lecture et d'écriture du client.

2. Du point de vue du serveur, utilisez setnx pour réaliser le verrouillage.

Remarque: Pour le premier type, l'application doit gérer la synchronisation des ressources par elle-même. Les méthodes qui peuvent être utilisées sont plus populaires, synchronisées ou verrouillées; le deuxième type nécessite la commande Redis setnx, mais certains problèmes doivent être notés.

12. Comprendre le CAS des choses redis (l'opération de vérification et de réglage implémente un verrouillage optimiste)?

Comme de nombreuses autres bases de données, Redis fournit également un mécanisme de transaction en tant que base de données NoSQL. Dans Redis, les quatre commandes MULTI / EXEC / DISCARD / WATCH sont la pierre angulaire de notre transaction.

Je pense que ce concept n'est pas nouveau pour les développeurs ayant une expérience dans le développement de bases de données relationnelles. Néanmoins, nous allons brièvement énumérer les caractéristiques d'implémentation des transactions dans Redis:

Toutes les commandes de la transaction seront exécutées dans un ordre sérialisé. Pendant l'exécution de la transaction, Redis ne fournira plus de services pour les demandes des autres clients, garantissant ainsi que toutes les commandes de la transaction sont exécutées atomiquement.
Par rapport aux transactions dans la base de données relationnelle, si une certaine commande ne s'exécute pas dans la transaction Redis, les commandes suivantes seront toujours exécutées.
Nous pouvons démarrer une transaction via la commande MULTI, et les personnes expérimentées dans le développement de bases de données relationnelles peuvent la comprendre comme une instruction "BEGIN TRANSACTION". Les commandes exécutées après cette instruction seront considérées comme des opérations dans la transaction, et enfin nous pouvons soumettre / annuler toutes les opérations dans la transaction en exécutant la commande EXEC / DISCARD. Ces deux commandes Redis peuvent être considérées comme équivalentes à l'instruction COMMIT / ROLLBACK dans une base de données relationnelle.
Avant le démarrage de la transaction, si une défaillance de communication se produit entre le client et le serveur et que le réseau est déconnecté, toutes les instructions suivantes à exécuter ne seront pas exécutées par le serveur. Cependant, si l'événement d'interruption du réseau se produit après que le client a exécuté la commande EXEC, toutes les commandes de la transaction seront exécutées par le serveur.
Lors de l'utilisation du mode Append-Only, Redis écrit toutes les opérations d'écriture de la transaction sur le disque dans cet appel en appelant la fonction système write. Cependant, s'il y a un plantage du système pendant le processus d'écriture, tel qu'un temps d'arrêt provoqué par une panne de courant, alors à ce stade, seule une partie des données peut être écrite sur le disque, tandis qu'une autre partie des données a été perdue.
Le serveur Redis effectuera une série de vérifications de cohérence nécessaires lors de son redémarrage. Une fois un problème similaire détecté, il se fermera immédiatement et donnera l'invite d'erreur correspondante.

Pour le moment, nous devons utiliser pleinement l'outil redis-check-aof fourni dans la boîte à outils Redis. Cet outil peut nous aider à localiser les incohérences des données et à restaurer certaines des données écrites. Après la réparation, nous pouvons redémarrer le serveur Redis.

13. Commande WATCH et verrouillage optimiste basé sur CAS:

Dans les transactions Redis, la commande WATCH peut être utilisée pour fournir des fonctions CAS (check-and-set). Supposons que nous surveillions plusieurs clés avant l'exécution de la transaction via la commande WATCH. Si une valeur de clé change après WATCH, la transaction exécutée par la commande EXEC sera abandonnée et une réponse Null multi-bulk est renvoyée pour informer l'appelant de la transaction.

L'exécution a échoué. Par exemple, nous supposons à nouveau que la commande incr n'est pas fournie dans Redis pour compléter l'incrément atomique de la valeur de clé. Si nous voulons implémenter cette fonction, nous ne pouvons écrire que le code correspondant par nous-mêmes. Le pseudo-code est le suivant:

val = GET mykey
val = val + 1
SET mykey $ val Le
code ci-dessus ne peut garantir que le résultat de l'exécution est correct dans le cas d'une connexion unique, car s'il y a plusieurs clients exécutant le code en même temps, alors Il y aura une sorte de scène d'erreur qui se produit souvent dans la condition de course des programmes multi-thread (condition de course).

Par exemple, dans l'étape de déverrouillage de l'expiration de la machine-outil Mitsubishi, les clients A et B lisent la valeur d'origine de mykey en même temps, en supposant que la valeur est 10, puis les deux clients ajoutent la valeur et la redéfinissent sur le serveur Redis. Cela entraînera le résultat de mykey à 11, pas ce que nous pensons que c'est. Afin de résoudre des problèmes similaires, nous avons besoin de l'aide de la commande WATCH, voir le code suivant:

WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $ val
EXEC
est différent du code précédent, le nouveau code surveille d'abord la clé via la commande WATCH avant d'obtenir la valeur de mykey, puis entoure la commande set dans la transaction De cette manière, il peut être efficacement garanti qu'avant que chaque connexion n'exécute EXEC, si la valeur de mykey obtenue par la connexion actuelle est modifiée par d'autres clients connectés, la commande EXEC de la connexion actuelle ne s'exécutera pas. De cette façon, l'appelant peut savoir si val a été réinitialisé avec succès après avoir évalué la valeur de retour.

14. Plusieurs façons de redéfinir la persistance

1. Instantanés

Par défaut, Redis stocke l'instantané de données dans un fichier binaire sur le disque et le nom du fichier est dump.rdb. Vous pouvez configurer la stratégie de persistance de Redis. Par exemple, s'il y a plus de M mises à jour toutes les N secondes dans l'ensemble de données, les données seront écrites sur le disque ou vous pouvez appeler manuellement la commande SAVE ou BGSAVE.

Principe de fonctionnement

Redis forks. Le
processus enfant commence à écrire des données dans le fichier RDB temporaire.
Lorsque le processus enfant a fini d'écrire le fichier RDB, remplacez l'ancien fichier par le nouveau fichier.
Cette approche permet à Redis d'utiliser la technologie de copie sur écriture.
2. AOF

Le mode instantané n'est pas très robuste. Lorsque le système est arrêté ou que Redis est accidentellement tué, les données écrites dans Redis seront perdues.

Cela peut ne pas être un gros problème pour certaines applications, mais pour les applications qui nécessitent une grande fiabilité, Redis n'est pas un choix approprié. Le mode de fichier avec ajout uniquement est une autre option. Vous pouvez activer le mode AOF dans le fichier de configuration

3. Mode mémoire virtuelle

Lorsque votre clé est petite et que la valeur est grande, l'effet de l'utilisation de VM sera meilleur, car cela économise plus de mémoire.

Lorsque votre clé n'est pas petite, vous pouvez envisager d'utiliser des méthodes extraordinaires pour transformer une grande clé en une grande valeur. Par exemple, vous pouvez envisager de combiner la clé et la valeur en une nouvelle valeur.

Le paramètre vm-max-threads peut définir le nombre de threads pour accéder au fichier d'échange. Il est préférable de ne pas dépasser le nombre de cœurs de la machine. S'il est défini sur 0, toutes les opérations sur le fichier d'échange sont en série. Cela peut entraîner une plus longue Il y a un délai, mais il y a une bonne garantie pour l'intégrité des données.

Lorsque je l'ai testé moi-même, j'ai constaté que les performances avec la mémoire virtuelle étaient également bonnes. Si la quantité de données est importante, vous pouvez envisager des bases de données distribuées ou autres.

15. Stratégie d'invalidation du cache Redis et mécanisme d'invalidation de la clé primaire

Comme un système de cache doit nettoyer régulièrement les données non valides, vous avez besoin d'une stratégie d'invalidation et d'élimination de la clé primaire.

Dans Redis, la clé avec une durée de vie est appelée volatile. Lors de la création d'un cache, définissez la durée de vie d'une clé donnée. Lorsque la clé expire (la durée de vie est 0), elle peut être supprimée.

1. Certaines opérations qui affectent le temps de survie

Le temps de survie peut être supprimé en utilisant la commande DEL pour supprimer la clé entière, ou les données d'origine peuvent être écrasées par les commandes SET et GETSET, c'est-à-dire modifier la valeur correspondant à la clé et utiliser la même clé et la même valeur pour écraser les données actuelles. Le temps de survie est différent.

Par exemple, l'exécution de la commande INCR sur une clé, de la commande LPUSH sur une liste ou de la commande HSET sur une table de hachage ne modifiera pas la durée de vie de la clé elle-même. En revanche, si vous utilisez RENAME pour renommer une clé, la durée de survie de la clé renommée est la même qu'avant le changement de nom.

Une autre possibilité de la commande RENAME est d'essayer de renommer une clé avec un temps de survie en un autre another_key avec un temps de survie, puis l'ancien another_key (et son heure de vivre) seront supprimés, puis l'ancienne clé sera renommée another_key, donc la nouvelle another_key a le même temps de survie que la clé d'origine. Utilisez la commande PERSIST pour supprimer le temps de survie de la clé sans supprimer la clé et faire de la clé une clé persistante à nouveau.

2. Comment mettre à jour le temps de survie

Vous pouvez exécuter la commande EXPIRE sur une clé qui a déjà un temps à vivre. Le temps à vivre nouvellement spécifié remplacera l'ancien temps à vivre. La précision du délai d'expiration a été contrôlée en 1 ms. La complexité temporelle de l'échec de la clé primaire est O (1). EXPIRE est utilisé avec la commande TTL. TTL peut afficher le temps de survie actuel de la clé. Si le paramètre réussit, il renvoie 1; lorsque la clé n'existe pas ou ne peut pas définir la durée de survie de la clé, elle renvoie 0.

Configuration maximale du cache:

Dans redis, l'utilisateur est autorisé à définir la taille de mémoire maximale. Server.maxmemory prend par défaut la valeur 0 et le cache maximal n'est pas spécifié. Si de nouvelles données sont ajoutées et dépassent la mémoire maximale, redis se bloque. Veillez donc à la définir. Lorsque la taille de l'ensemble de données de mémoire redis atteint une certaine taille, une stratégie d'élimination des données sera mise en œuvre.

Redis propose 6 stratégies d'élimination des données:

volatile-lru: sélectionnez les données les moins récemment utilisées dans l'ensemble de données avec le délai d'expiration défini (server.db [i] .expires). Éliminez
volatile-ttl: sélectionnez dans l'ensemble de données avec le délai d'expiration défini (server.db [i]). Sélectionnez les données expirées pour éliminer les données qui expireront
volatile-aléatoire: sélectionnez arbitrairement les données de l'ensemble de données (server.db [i] .expires) avec le délai d'expiration défini
allkeys-lru: supprimez les données de l'ensemble de données (server.db [i] .dict) la sélection des moins récemment données utilisées sur
AllKeys aléatoires: l'ensemble de données (server.db [i] .dict) sélectionner toutes les données sur
non-enviction (expulsion): interdit les données d'expulsion ont
noté ici six types de mécanismes, Volatile et allkeys stipulent s'il faut éliminer les données de l'ensemble de données avec le délai d'expiration ou de l'ensemble de l'ensemble de données. Les lru, ttl et random suivants sont trois stratégies d'élimination différentes, plus une non-envition ne jamais recycler Stratégie.

Utilisez des règles de stratégie:

Si les données montrent une distribution de loi de puissance, c'est-à-dire qu'une partie de la fréquence d'accès aux données est élevée et une partie de la fréquence d'accès aux données est faible, alors utilisez allkeys-lru
Si les données sont distribuées de manière égale, c'est-à-dire que toutes les fréquences d'accès aux données sont les mêmes, alors utilisez allkeys-random
trois données Stratégie d'élimination:

ttl et random sont relativement faciles à comprendre et leur mise en œuvre est relativement simple. La raison principale est que Lru a récemment utilisé la stratégie de moindre élimination. La conception triera les clés en fonction du délai d'expiration, puis prendra la première clé à éliminer.

16. La scène la plus appropriée pour redis

Redis est le plus approprié pour tous les scénarios de données internes. Bien que Redis offre également une fonction de persistance, il s'agit en fait davantage d'une fonction sauvegardée sur disque. Il y a une grande différence par rapport à la persistance traditionnelle, donc peut-être que tout le monde le fera Doutes, il semble que Redis ressemble plus à une version améliorée de Memcached, alors quand utiliser Memcached et quand utiliser Redis?

Si vous comparez simplement la différence entre Redis et Memcached, la plupart obtiendront les vues suivantes:

Redis prend non seulement en charge les données de type k / v simples, mais fournit également le stockage des structures de données telles que list, set, zset et hash.
Redis prend en charge la sauvegarde des données, c'est-à-dire la sauvegarde des données en mode maître-esclave.
Redis prend en charge la persistance des données. Il peut conserver les données en mémoire sur le disque et les réutiliser au redémarrage.
1. Cache de session

Le scénario le plus couramment utilisé pour utiliser Redis est le cache de session. L'avantage d'utiliser Redis pour mettre en cache des sessions sur un autre stockage (tel que Memcached) est que Redis fournit la persistance. Lors de la maintenance d'un cache qui ne nécessite pas strictement de cohérence, si les informations du panier de l'utilisateur sont perdues, la plupart des gens seront mécontents. Maintenant, seront-ils toujours comme ça?

Heureusement, comme Redis s'est amélioré au fil des ans, il est facile de trouver comment utiliser correctement Redis pour mettre en cache les documents de session. Même la célèbre plateforme commerciale Magento fournit des plugins Redis.

2. Cache pleine page (FPC)

En plus des jetons de session de base, Redis fournit également une plate-forme FPC très simple. Pour en revenir au problème de cohérence, même si l'instance Redis est redémarrée, les utilisateurs ne verront pas de baisse de la vitesse de chargement des pages en raison de la persistance du disque. Il s'agit d'une énorme amélioration, similaire au FPC local PHP.

Prenant Magento comme exemple, Magento fournit un plugin pour utiliser Redis comme backend de cache pleine page.

De plus, pour les utilisateurs de WordPress, Pantheon dispose d'un très bon plug-in wp-redis, ce plug-in peut vous aider à charger les pages que vous avez visitées à la vitesse la plus rapide.

3. File d'attente

L'un des avantages de Reids dans le domaine des moteurs de stockage en mémoire est de fournir des opérations de liste et d'ensemble, ce qui fait de Redis une bonne plate-forme de file d'attente de messages à utiliser. Le fonctionnement de Redis en tant que file d'attente est similaire à l'opération push / pop de list dans un langage de programmation local (tel que Python).

Si vous recherchez rapidement des "files d'attente Redis" dans Google, vous trouverez immédiatement un grand nombre de projets open source. Le but de ces projets est d'utiliser Redis pour créer de très bons outils back-end pour répondre à diverses exigences de file d'attente. Par exemple, Celery a un arrière-plan qui utilise Redis comme courtier, vous pouvez le vérifier à partir d'ici.

4. Classement / compteur

Redis effectue de très bonnes opérations d'incrémentation ou de décrémentation sur les nombres en mémoire. Les étapes de déverrouillage d'expiration des machines-outils Mitsubishi Set et Sorted Set facilitent également la réalisation de ces opérations. Redis fournit simplement ces deux structures de données.

Donc, nous devons obtenir les 10 meilleurs utilisateurs de la collection triée - nous l'appelons "user_scores", nous devons simplement exécuter comme suit:

Bien sûr, cela suppose que vous triez dans un ordre croissant en fonction du score de votre utilisateur. Si vous souhaitez renvoyer l'utilisateur et le score de l'utilisateur, vous devez effectuer ceci:

A publié 28 articles originaux · Likes0 · Visites 907

Je suppose que tu aimes

Origine blog.csdn.net/srhgsr/article/details/105545065
conseillé
Classement