Comment optimiser l'espace de cache Redis
Paramètre de la scène
1. Nous devons stocker POJO dans le cache. La classe est définie comme suit
public class TestPOJO implements Serializable { private String testStatus; private String userPin; private String investor; private Date testQueryTime; private Date createTime; private String bizInfo; private Date otherTime; private BigDecimal userAmount; private BigDecimal userRate; private BigDecimal applyAmount; private String type; private String checkTime; private String preTestStatus; public Object[] toValueArray(){ Object[] array = {testStatus, userPin, investor, testQueryTime, createTime, bizInfo, otherTime, userAmount, userRate, applyAmount, type, checkTime, preTestStatus}; return array; } public CreditRecord fromValueArray(Object[] valueArray){ //具体的数据类型会丢失,需要做处理 } }
Utilisez JSON pour sérialiser. directement, imprimez
length=284**, **Cette méthode est la méthode la plus simple et la méthode la plus couramment utilisée. Les données spécifiques sont les suivantes : {"applyAmount":200.11,"bizInfo":"XX", "checkTime": "2023-02-02", "investisseur": "ABCD", "otherTime": "2023-04-10 17:45:17.717", "preCheckStatus": "TRAITEMENT", "testQueryTime": 2023- 04-10 17:45:17.717","testStatus":"SUCCESS","type":"Y","userAmount":1000.00,"userPin":"ABCDEFGHIJ","userRate":0.002}
Nous avons constaté que ce qui précède contient beaucoup de données inutiles et qu'il n'est pas nécessaire de stocker les noms d'attributs.
Amélioration 1-Supprimez le nom de l'attributTestPOJO pojo = new TestPOJO(); pojo.setApplyAmount(new BigDecimal("200.11")); pojo.setBizInfo("XX"); pojo.setUserAmount(new BigDecimal("1000.00")); pojo.setTestStatus("SUCCESS"); pojo.setCheckTime("2023-02-02"); pojo.setInvestor("ABCD"); pojo.setUserRate(new BigDecimal("0.002")); pojo.setTestQueryTime(new Date()); pojo.setOtherTime(new Date()); pojo.setPreTestStatus("PROCESSING"); pojo.setUserPin("ABCDEFGHIJ"); pojo.setType("Y");
En sélectionnant la structure du tableau au lieu de la structure de l'objet, le nom de l'attribut est supprimé et l'impression
length=144réduit la taille des données de 50 %. comme suit : ["SUCCESS ","ABCDEFGHIJ","ABCD","2023-04-10 17:45:17.717",null,"XX","2023-04-10 17:45:17.717", 1000.00,0.002,200.11,"Y ","2023-02-02","PROCESSING"]
Nous avons constaté qu'il n'est pas nécessaire de stocker null Le format de l'heure est sérialisé dans une chaîne. Les résultats de sérialisation déraisonnables conduisent à des données. expansion, nous devrions donc choisir de meilleurs outils de sérialisation.
Amélioration 2-Utilisez de meilleurs outils de sérialisationSystem.out.println(JSON.toJSONString(pojo).length());
Choisissez de meilleurs outils de sérialisation pour obtenir une compression de champ et un format de données raisonnable, imprimez **longueur=92, **l'espace est réduit de 40 % par rapport à l'étape précédente.
Il s'agit d'une donnée binaire. Redis doit être exploité en binaire. Après avoir converti le binaire en chaîne, imprimez-le comme suit : ��SUCCESS�ABCDEFGHIJ�ABCD� �j�6���XX� �j� 6�� ��?`bM����@i � �Q�Y�2023-02-02�PROCESSING
En suivant cette idée et en creusant plus profondément, nous avons découvert que nous pouvions sélectionner manuellement le type de données, Pour obtenir des effets d'optimisation plus extrêmes et choisir d'utiliser des types de données plus petits, d'autres améliorations seront réalisées.
Amélioration 3 - Types de données optimisésDans le cas d'utilisation ci-dessus, les trois champs testStatus, preCheckStatus et investisseurs sont en fait des types de chaînes énumérés si des types de données plus simples peuvent être utilisés (tels que byte ou int, etc.) Le remplacement de la chaîne peut encore économiser de l'espace. Vous pouvez utiliser le type Long au lieu d'une chaîne pour représenter checkTime, afin que l'outil de sérialisation génère moins d'octets.
System.out.println(JSON.toJSONString(pojo.toValueArray()).length());
Après un ajustement manuel, un type de données plus petit a été utilisé à la place du type String, impressionlength=69
Amélioration 4-Considérez la compression ZIPEn plus des points ci-dessus, vous pouvez également envisager d'utiliser le ZIP La méthode de compression obtient une taille plus petite. Lorsque le contenu est volumineux ou répétitif, l'effet de la compression ZIP est évident. Si le contenu stocké est un tableau de TestPOJO, la compression ZIP peut être adaptée.
Pour les fichiers de moins de 30 octets, la compression ZIP peut augmenter la taille du fichier mais ne peut pas nécessairement la réduire. Dans le cas de contenus moins répétitifs, aucune amélioration significative ne peut être obtenue. Et il y a une surcharge du processeur. Après l'optimisation ci-dessus, la compression ZIP n'est plus une option obligatoire. Des tests basés sur des données réelles sont nécessaires pour déterminer l'effet de la compression ZIP.
Enfin implémentéLes étapes d'amélioration ci-dessus reflètent les idées d'optimisation, mais le processus de désérialisation entraînera la perte de types, ce qui est plus lourd à gérer, nous devons donc également considérer la question de la désérialisation.
Lorsque l'objet de cache est prédéfini, nous pouvons traiter complètement chaque champ manuellement, donc en combat réel, il est recommandé d'utiliser la sérialisation manuelle pour atteindre l'objectif ci-dessus, obtenir un contrôle raffiné et obtenir le meilleur effet de compression et une surcharge de performances minimale. Vous pouvez vous référer au code d'implémentation msgpack suivant. Voici le code de test. Veuillez emballer vous-même de meilleurs outils tels que Packer et UnPacker :
//我们仍然选取JSON格式,但使用了第三方序列化工具 System.out.println(new ObjectMapper(new MessagePackFactory()).writeValueAsBytes(pojo.toValueArray()).length);
public Object[] toValueArray(){ Object[] array = {toInt(testStatus), userPin, toInt(investor), testQueryTime, createTime, bizInfo, otherTime, userAmount, userRate, applyAmount, type, toLong(checkTime), toInt(preTestStatus)}; return array; }
Supposons que nous stockons les données de 200 millions d'utilisateurs, et chaque utilisateur contient Il y a 40 champs, la longueur de la clé du champ est de 6 octets et les champs sont gérés séparément.
Normalement, nous penserons à la structure de hachage, et la structure de hachage stocke les informations clés, qui occuperont des ressources supplémentaires. La clé de champ est une donnée inutile. Selon les idées ci-dessus, vous pouvez utiliser une liste au lieu d'une structure de hachage. Grâce au test de l'outil officiel Redis, l'utilisation de la structure de liste nécessite 144 Go d'espace, tandis que l'utilisation de la structure de hachage nécessite 245 Go d'espace** (Lorsque plus de 50 % des attributs sont vides, un test est nécessaire pour voir si c'est le cas. toujours applicable)**
Dans le cas ci-dessus, nous avons pris plusieurs mesures très simples. Quelques lignes de code simples peuvent réduire l'espace de plus de 70 % dans des scénarios avec de grandes quantités de données et des exigences de performances élevées. , il est fortement recommandé de. :• Utilisez des tableaux au lieu d'objets (si un grand nombre de champs sont vides, vous devez coopérer avec des outils de sérialisation pour compresser les valeurs nulles)
• Utilisez la compression ZIP
• Utilisez une liste au lieu d'une structure de hachage (si un grand nombre de champs sont vides, un test et une comparaison sont nécessaires)
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Redis utilise des tables de hachage pour stocker les données et prend en charge les structures de données telles que les chaînes, les listes, les tables de hachage, les collections et les collections ordonnées. Redis persiste les données via des instantanés (RDB) et ajoutez les mécanismes d'écriture uniquement (AOF). Redis utilise la réplication maître-esclave pour améliorer la disponibilité des données. Redis utilise une boucle d'événement unique pour gérer les connexions et les commandes pour assurer l'atomicité et la cohérence des données. Redis définit le temps d'expiration de la clé et utilise le mécanisme de suppression paresseux pour supprimer la clé d'expiration.

Redis Counter est un mécanisme qui utilise le stockage de la paire de valeurs de clés Redis pour implémenter les opérations de comptage, y compris les étapes suivantes: création de clés de comptoir, augmentation du nombre, diminution du nombre, réinitialisation du nombre et objet de comptes. Les avantages des compteurs Redis comprennent une vitesse rapide, une concurrence élevée, une durabilité et une simplicité et une facilité d'utilisation. Il peut être utilisé dans des scénarios tels que le comptage d'accès aux utilisateurs, le suivi des métriques en temps réel, les scores de jeu et les classements et le comptage de traitement des commandes.

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

Étapes pour résoudre le problème que Redis-Server ne peut pas trouver: Vérifiez l'installation pour vous assurer que Redis est installé correctement; Définissez les variables d'environnement redis_host et redis_port; Démarrer le serveur Redis Redis-Server; Vérifiez si le serveur exécute Redis-Cli Ping.

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.
