Comment écrire du code de mise en cache avec élégance





Dans la pratique quotidienne du codage, la mise en cache est souvent utilisée pour résoudre des problèmes de concurrence élevée. La mise en cache peut être considérée comme le meilleur outil pour résoudre les pics de trafic. Bien que l'équipe middleware du groupe ait construit une infrastructure de mise en cache et nous ait aidé à résoudre la plupart des problèmes, dans le processus de codage lui-même, les problèmes suivants subsistent lorsque l'application appelle l'API de cache :
  1. La logique d'utilisation du cache est très générale, en gros, le cache est vérifié en premier, et s'il y en a, il est renvoyé directement sans vérifier la base de données, puis placé dans le cache. Cette logique générale est dispersée dans tout le système, violant le principe de forte cohésion et de faible couplage.
  2. Le code de mise en cache et le code de logique métier sont profondément couplés, ce qui non seulement réduit la lisibilité du code, mais augmente également la complexité du système.
  3. Si vous souhaitez changer de cache (MDB->LDB) ou mettre à niveau l'API, tous les codes impliqués doivent être modifiés.
  4. Si vous souhaitez résoudre des problèmes courants tels que la pénétration du cache, la pénétration du cache, le cache en cascade, etc., vous devez les résoudre via le framework.
Par conséquent, ce qu'est le cache et comment choisir un certain type de cache ne sont pas le sujet de cet article. Aujourd'hui, j'écrirai sur la façon de séparer le code du cache du code métier pendant le processus de codage lui-même pour rendre le code plus concis et plus simple. lire.

Analyse pratique


Lisez d'abord les données du cache et revenez directement s'il y a des données. Si aucune donnée n'est lue, lisez les données de la base de données, puis mettez à jour le cache une fois les données renvoyées.

Ce scénario est très courant dans le codage quotidien et est trop simple, mais le code réel est en effet très différent. Voici quelques exemples :


▐Écriture traditionnelle  


Quel que soit le cache utilisé, utilisez-le directement et intégrez-le dans le code métier. Ce type de code est quelque chose que je ne veux pas voir, que ce soit pour la révision du code ou lorsque les générations futures apprendront le code métier. La raison est très simple et n'a rien à voir avec les fonctions métier réelles. Je ne veux pas savoir ce qu'est le cache. vous utilisez ou comment vous codez le code du cache.



▐Une manière d'écrire plus avancée  


Par rapport à la méthode d'écriture traditionnelle, afin de résoudre le problème de la mise en cache de divers formats de données (Liste, Carte, etc.) et de la sérialisation de divers objets (java, json), l'équipe peut encapsuler la mise en cache dans une API simple accessible à tous. . Il est plus facile à utiliser, mais le code est toujours intégré au code métier et n’a pas été supprimé.



▐Comment rédiger des annotations  


La dernière est la méthode d'écriture d'annotations. Par rapport aux deux premières méthodes d'écriture, le code a été séparé du code métier. Les personnes qui lisent le code ne se soucieront que de la façon dont la fonction métier est implémentée, du cache utilisé et de la manière dont elle est utilisée. est mis en œuvre, ce qui peut être complètement ignoré.


analyse de la solution de cache de printemps


Le cache Spring utilise un proxy dynamique pour traiter les opérations liées au cache dans la classe proxy, et appelle en même temps des méthodes dans la classe proxy, afin que le code qui exploite le cache et le code métier puissent être séparés, et lorsque la capacité de cache en a besoin à renforcer ultérieurement, il suffit de modifier simplement la méthode dans la classe proxy.

Ce qui précède est le principe de Spring Cache. Spring Cache est un cadre de mise en cache général fourni par Spring. Il utilise AOP pour implémenter des fonctions de mise en cache basées sur des annotations, de sorte que les développeurs n'ont pas besoin de se soucier du cadre de mise en cache utilisé en bas. Il leur suffit d'ajouter une annotation à la méthode pour implémenter la fonction de mise en cache. Grâce à Spring Cache, les utilisateurs peuvent rapidement développer une très bonne fonction de mise en cache.

▐Répertoire de codes  



▐Carte d' annotation  



▐Exemple d'utilisation d'annotations  


@Cacheable(value = "user_cache", unless = "#result == null")public User getUserById(Long id) { return userMapper.getUserById(id);}@CachePut(value = "user_cache", key = "#user.id", unless = "#result == null")public User updateUser(User user) { userMapper.updateUser(user); return user;}@CacheEvict(value = "user_cache", key = "#id")public void deleteUserById(Long id) { userMapper.deleteUserById(id);}


▐Analyse du programme  


Spring Cache est très puissant et son design est très élégant. Il est particulièrement adapté aux scénarios dans lesquels le contrôle du cache n'est pas si détaillé, comme les pages d'affichage statiques, le nombre de likes, les classements, etc. La caractéristique de ces scénarios est qu'ils n'ont pas d'exigences aussi strictes sur les données en temps réel. besoin de mettre en cache la source de données et de la mettre automatiquement en cache après expiration. Dans ces scénarios, Spring Cache est un artefact qui peut considérablement améliorer l’efficacité de la recherche et du développement.

Cependant, dans les scénarios avec une concurrence élevée et un volume de données important, une extension fonctionnelle est toujours nécessaire pour un contrôle fin de la granularité du cache.
  1. Cache multi-niveaux ;
  2. Le cache est actualisé régulièrement ;
  3. cache de liste ;
  4. Mécanisme de protection du cache cpp ;
  5. Nombre de caches.

Par exemple : Spring Cache n'a pas d'implémentation de cache de deuxième niveau


Schéma de cache personnalisé


Apprenez la solution Spring Cache Framework et implémentez un framework de cache personnalisé, qui non seulement conserve les avantages du framework Spring Cache, mais réalise également de nombreuses fonctionnalités manquantes du Spring Cache, telles que la panne du cache, la protection contre la pénétration du cache, le cache multi-niveaux, etc. .


▐Exemple   de code d'annotation



▐Structure du   projet



écris à la fin

Avec l'aide de l'implémentation du cache Spring, nous construisons un cadre de cache personnalisé et étendons de nombreuses annotations, telles que le comptage, l'actualisation du cache, le cache de liste, le verrouillage distribué, le cache multiniveau, etc., qui réalise non seulement la séparation du code du cache et code métier, mais étend également le ressort La capacité de mise en cache améliore considérablement la lisibilité du code et réduit l'efficacité de la maintenance du code mis en cache.


présentation de l'équipe


La mission de l'équipe Tmall Automotive Technology est de découvrir la vie ultime des personnes et des voitures, de remodeler l'industrie automobile et d'être un gestionnaire automobile attentionné autour de vous. Ils construisent tous l'esprit des consommateurs pour la visualisation, l'achat et l'entretien des voitures en ligne, et la numérisation. et intégrer verticalement l'industrie automobile, et grâce aux percées du modèle, tirer parti de l'intégration des produits et des effets, améliorer l'efficacité de l'industrie et créer des dividendes pour l'industrie.


¤Agrandir la lecture¤  

Technologie 3DXR  |  technologie des terminaux  |  technologie audio et vidéo

Technologie côté serveur  |  Qualité technique Algorithme des  données 


Cet article est partagé à partir du compte public WeChat - Big Taobao Technology (AlibabaMTT).
En cas d'infraction, veuillez contacter [email protected] pour suppression.
Cet article participe au « Plan de création de sources OSC ». Vous qui lisez, êtes invités à vous joindre et à partager ensemble.

Un programmeur né dans les années 1990 a développé un logiciel de portage vidéo et en a réalisé plus de 7 millions en moins d'un an. La fin a été très éprouvante ! Des lycéens créent leur propre langage de programmation open source en guise de cérémonie de passage à l'âge adulte - commentaires acerbes des internautes : s'appuyant sur RustDesk en raison d'une fraude généralisée, le service domestique Taobao (taobao.com) a suspendu ses services domestiques et repris le travail d'optimisation de la version Web Java 17 est la version Java LTS la plus utilisée Part de marché de Windows 10 Atteignant 70 %, Windows 11 continue de décliner Open Source Daily | Google soutient Hongmeng pour prendre le relais des téléphones Android open source pris en charge par Docker ; Electric ferme la plate-forme ouverte Apple lance la puce M4 Google supprime le noyau universel Android (ACK) Prise en charge de l'architecture RISC-V Yunfeng a démissionné d'Alibaba et prévoit de produire des jeux indépendants sur la plate-forme Windows à l'avenir
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4662964/blog/11104135
conseillé
Classement