Les noms de clés stockés dans Redis ne sont pas standardisés et sont relativement arbitraires
Redis est utilisé comme référentiel, il y a un risque de perte de données, et là ; il n'y a pas de plan de rechargement ;
Redis met en cache les clés sans définir le délai d'expiration. La mise en cache des données basse fréquence prend beaucoup de mémoire, ce qui provoque le crash du service
Redis met en cache un grand nombre de gros ; les clés, qui consomment beaucoup de bande passante réseau lorsque l'application les obtient, et leur suppression peut facilement provoquer une congestion.
Une mauvaise utilisation du client Redis, entraînant un délai d'attente pour les autres connexions client. est incorrect et le pool de connexions n'est pas utilisé. Un grand nombre de tentatives de connexion entraînent l'épuisement des ressources du port système
Utilisation inappropriée de la commande client Redis, entraînant un grand nombre de requêtes lentes, affectant d'autres services d'application ; , comme l'utilisation de touches* ou de commandes flushall pendant les périodes de pointe ;
Scénarios à haute concurrence : mise en cache des données de points d'accès, cela peut améliorer la vitesse de réponse globale du système et réduire la Pression IO de la base de données ;
Scénario à durée limitée : utilisez la commande Redis expire pour définir l'expiration et le renouvellement de la session, le code de vérification du téléphone mobile, etc. ; L'utilisation de la liste de Redis et des structures de données définies peut implémenter un variété d'applications de classement complexes
Opérations de collecte de données : utilisez la liste Redis, l'ensemble, l'ensemble trié pour faciliter les calculs de données, tels que l'intersection, l'union, l'ensemble de différences, etc.
Enregistrement continu : vous pouvez utiliser redis La structure de données bitmap implémente les services liés à la connexion ;
Compteur : utilisez les commandes Redis incr et incrby pour implémenter les statistiques du numéro d'appel de l'API, la limitation du courant de l'API et d'autres scénarios
Verrouillage distribué : utilisez la fonction setnx de ; Redis pour écrire un verrou de distribution, des composants open source typiques tels que Redisson ;
Comment concevoir une clé élégante
Alors comment concevoir une clé plus élégante ? Parlons-en en détail en nous basant sur l'expérience réelle et les pièges de l'éditeur :
1 Suivez les conventions de bonnes pratiques suivantes :
;
Ne pas inclure de caractères spéciaux
Concernant les suggestions ci-dessus, cela présente les avantages suivants :
Lisible Forte flexibilité, par exemple, lorsque nous concevons de tels une structure de clé, order:user:10, en un coup d'œil nous savons qu'il s'agit d'une clé liée aux commandes des utilisateurs ;
est pratique pour la maintenance et la gestion, différentes applications ou différentes entreprises utilisent différentes Le préfixe est très pratique pour la recherche et l'emplacement de clés dans les outils client visuels ou les lignes de commande
Évitez les conflits de clés et évitez les conflits de clés de cache causés par plusieurs personnes utilisant des valeurs telles que userId comme clés pendant l'utilisation
Utilisez le type de chaîne comme clé ; , et le codage sous-jacent inclut int, embstr et raw, ce qui peut réduire efficacement l'utilisation de la mémoire. L'utilisation d'embstr peut traiter des chaînes inférieures à 44 octets tout en occupant moins de mémoire, car elle utilise un espace mémoire continu. tapez les clés, il est recommandé que le nombre d'éléments soit inférieur à 1000 ; le nombre de membres dans la Clé. , par exemple :
La quantité de données dans la Clé elle-même est trop importante : une Clé de type String, sa valeur est de 5 Mo
Le nombre de membres dans la Clé ; est trop grande : une clé de type ZSET, son nombre de membres est de 10 000
La quantité de données des membres dans la clé est trop grande : une clé de type Hash n'a que 1 000 membres mais la valeur totale de ces membres est de 100 Mo ;
Désalignement des données
L'utilisation de la mémoire de l'instance Redis où se trouve BigKey est beaucoup plus élevée que celle des autres instances, et les ressources mémoire des fragments de données ne peuvent pas être équilibré ;
Les opérations sur le hachage, la liste, le zset, etc. avec de nombreux éléments prendront beaucoup de temps et entraîneront le blocage du thread principal
Pression du processeur
Sérialisation des données et désérialisation de BigKey Ce sera le cas. faire monter en flèche l'utilisation du processeur, affectant l'instance Redis et d'autres applications sur la machine
3 Comment découvrir BigKey
Exécutez la commande redis-cli --bigkeys sur la machine installée
Utilisation Le paramètre --bigkeys fourni par redis-cli peut parcourir et analyser toutes les clés, et renvoyer les informations statistiques globales de la clé et de la grande clé Top 1 de chaque donnée
Par scan
; écrire un programme et utiliser scan analyse toutes les clés dans Redis et utilise strlen, hlen et d'autres commandes pour déterminer la longueur de la clé (l'UTILISATION DE LA MÉMOIRE n'est pas recommandée ici
Utilisez des outils tiers
Utilisez des outils tiers, tels que Redis-Rdb-Tools, analyse les fichiers d'instantanés RDB et analyse de manière exhaustive l'utilisation de la mémoire
Utilisez la surveillance du réseau
Utilisez des outils personnalisés pour surveiller les données réseau entrantes et sortantes de Redis, et alerter de manière proactive lorsque la valeur d'avertissement est dépassée ;
Comme mentionné ci-dessus, de nombreux étudiants qui utilisent Redis pour la première fois, pour de nombreux scénarios commerciaux, utilisent une structure simple de clé/val et ne réfléchissez pas profondément à la question de savoir si cela est raisonnable, ou si cela entraînera des problèmes de performances associés à l'avenir
Pour ce problème, fondamentalement parlant, nous devons avoir une compréhension et une maîtrise approfondies des types de données couramment utilisés ? redis.Sur cette base, nous pouvons concevoir des solutions pour différents scénarios commerciaux. Stockage efficace des données structurées
Réfléchissons, comment mettre en cache des données telles que la liste d'objets utilisateur ?
Option 1 : la clé est usrId, la valeur est la chaîne sérialisée de l'objet, la structure des données est similaire à la suivante
Avantages : accès facile, simple et approximatif, il suffit de faire json ; lors de l'accès, convertissez-le simplement en objet ;
Inconvénients : Couplage de données, pas assez flexible. Une fois que l'objet ajoute des champs ou supprime des champs, le coût de reconstruction du cache est très élevé
Option 2 : Utiliser une structure de liste pour ; cache Liste d'ID utilisateur, la structure des données est la suivante :
Avantages : faible utilisation de la mémoire, fonctionnement efficace
Inconvénient : après avoir obtenu val, une recherche plus approfondie dans la base de données est nécessaire pour obtenir l'objet complet ; 3 : Utilisez la structure de hachage pour mettre en cache les objets, et les données sont les suivantes :
Avantages : La couche inférieure utilise une liste zip, qui prend peu de place et peut accéder de manière flexible à tous les champs de l'objet ;
Inconvénients : Le codage ; est relativement compliqué ;
Le cache Redis est actuellement utilisé Suggestions d'utilisation dans l'application
Vous devriez envisager de séparer les données chaudes et froides. Pour les requêtes, utilisez Redis pour les requêtes professionnelles à haute fréquence et envisagez d'utiliser la base de données pour les requêtes à basse fréquence.
Lorsque le programme traite les données, vous devriez envisager le risque de perte de données dans Redis, vous devez donc implémenter les données de la base de données. Charger et mettre automatiquement en cache les données perdues dans Redis
Utilisez les commandes O(N) avec prudence, telles que list, set, hash lors de l'utilisation des données. les structures, hgetall, lrange, smembers, zrange, etc. ne sont pas inutilisables en utilisant hscan et sscan , zscan à la place.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!