Table des matières
Paramètre de la scène
**, **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}
ré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"]
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
Après un ajustement manuel, un type de données plus petit a été utilisé à la place du type String, impressionlength=69
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.
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 :
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)**
Maison base de données Redis Comment optimiser l'espace de cache Redis

Comment optimiser l'espace de cache Redis

May 27, 2023 pm 11:44 PM
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){         
        //具体的数据类型会丢失,需要做处理
    }
}
Copier après la connexion

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'attribut

TestPOJO 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");
Copier après la connexion

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=144

ré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érialisation

System.out.println(JSON.toJSONString(pojo).length());
Copier après la connexion

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és

Dans 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());
Copier après la connexion

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 ZIP

En 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);
Copier après la connexion
public Object[] toValueArray(){
    Object[] array = {toInt(testStatus), userPin, toInt(investor), testQueryTime,
    createTime, bizInfo, otherTime, userAmount,
    userRate, applyAmount, type, toLong(checkTime), toInt(preTestStatus)};
    return array;
}
Copier après la connexion

Extension de scénario

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

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

Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

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).

Comment afficher toutes les clés dans Redis Comment afficher toutes les clés dans Redis Apr 10, 2025 pm 07:15 PM

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.

Comment implémenter le redis sous-jacent Comment implémenter le redis sous-jacent Apr 10, 2025 pm 07:21 PM

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.

Comment implémenter Redis Counter Comment implémenter Redis Counter Apr 10, 2025 pm 10:21 PM

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.

Comment utiliser Redis Lock Comment utiliser Redis Lock Apr 10, 2025 pm 08:39 PM

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.

Que faire si redis-server ne peut être trouvé Que faire si redis-server ne peut être trouvé Apr 10, 2025 pm 06:54 PM

É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.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

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.

See all articles