So schreiben Sie Caching-Code elegant





In der täglichen Codierungspraxis wird Caching häufig zur Lösung von Problemen mit hoher Parallelität eingesetzt. Man kann sagen, dass Caching das beste Werkzeug zur Lösung von Verkehrsspitzen ist. Obwohl das Middleware-Team der Gruppe eine Caching-Infrastruktur aufgebaut und uns bei der Lösung der meisten Probleme geholfen hat, bestehen im eigentlichen Codierungsprozess immer noch die folgenden Probleme, wenn die Anwendung die Cache-API aufruft:
  1. Die Verwendungslogik des Caches ist grundsätzlich sehr allgemein: Der Cache wird zuerst überprüft. Wenn vorhanden, wird er direkt zurückgegeben, ohne die Datenbank zu überprüfen, und dann im Cache abgelegt. Diese allgemeine Logik ist im gesamten System verstreut und verstößt gegen das Prinzip der hohen Kohäsion und der geringen Kopplung.
  2. Caching-Code und Geschäftslogikcode sind eng miteinander verknüpft, was nicht nur die Lesbarkeit des Codes verringert, sondern auch die Komplexität des Systems erhöht.
  3. Wenn Sie den Cache wechseln (MDB->LDB) oder die API aktualisieren möchten, müssen alle beteiligten Codes geändert werden.
  4. Wenn Sie häufige Probleme wie Cache-Penetration, Cache-Penetration, kaskadierender Cache usw. lösen möchten, müssen Sie diese über das Framework lösen.
Daher steht die Frage, was ein Cache ist und wie man einen bestimmten Cache-Typ auswählt, nicht im Mittelpunkt dieses Artikels. Heute werde ich darüber schreiben, wie man den Cache-Code während des eigentlichen Codierungsprozesses vom Geschäftscode trennt, um den Code prägnanter und einfacher zu gestalten lesen.

Praktische Analyse


Lesen Sie zuerst die Cache-Daten und kehren Sie direkt zurück, wenn keine Daten gelesen werden. Lesen Sie die DB-Daten und aktualisieren Sie dann den Cache, nachdem die Daten zurückgegeben wurden.

Dieses Szenario kommt im täglichen Codieren sehr häufig vor und ist zu einfach, aber der tatsächliche Code ist tatsächlich sehr unterschiedlich. Hier sind einige Beispiele:


▐Traditionelles Schreiben  


Welcher Cache auch immer verwendet wird, verwenden Sie ihn direkt und betten Sie ihn in den Geschäftscode ein. Diese Art von Code möchte ich nicht sehen, sei es zur Codeüberprüfung oder wenn zukünftige Generationen Geschäftscode lernen. Der Grund ist sehr einfach und hat nichts mit tatsächlichen Geschäftsfunktionen zu tun Sie verwenden oder wie Sie den Cache-Code codieren.



▐Eine fortgeschrittenere Art zu schreiben  


Im Vergleich zur herkömmlichen Schreibmethode kann das Team das Caching in einer einfachen API kapseln, die jeder verwenden kann, um das Problem des Zwischenspeicherns verschiedener Datenformate (Liste, Karte usw.) und verschiedener Objektserialisierungen (Java, JSON) zu lösen . Es ist einfacher zu verwenden, aber der Code ist immer noch in den Geschäftscode eingebettet und wurde nicht entfernt.



▐Wie schreibe ich Anmerkungen ?  


Die letzte Methode ist das Schreiben von Anmerkungen. Im Vergleich zu den ersten beiden Schreibmethoden wurde der Code vom Geschäftscode getrennt. Personen, die den Code lesen, kümmern sich nur darum, wie die Geschäftsfunktion implementiert wird und welcher Cache verwendet wird implementiert ist, was komplett ignoriert werden kann.


Analyse der Spring-Cache-Lösung


Der Spring-Cache verwendet einen dynamischen Proxy, um Cache-bezogene Vorgänge in der Proxy-Klasse zu verarbeiten, und ruft gleichzeitig Methoden in der Proxy-Klasse auf, sodass der Code, der den Cache betreibt, und der Geschäftscode getrennt werden können und wann die Cache-Funktion erforderlich ist Um es später zu verstärken, ändern Sie einfach die Methode in der Proxy-Klasse.

Das Obige ist das Prinzip von Spring Cache. Spring Cache ist ein allgemeines Caching-Framework, das von Spring bereitgestellt wird. Es verwendet AOP, um annotationsbasierte Caching-Funktionen zu implementieren, sodass sich Entwickler nicht darum kümmern müssen, welches Caching-Framework unten verwendet wird. Sie müssen der Methode lediglich eine Annotation hinzufügen, um die Caching-Funktion zu implementieren. Mit Spring Cache können Benutzer schnell eine sehr gute Caching-Funktion entwickeln.

▐Codeverzeichnis  



▐Anmerkungskarte  



▐Beispiel zur Verwendung von Anmerkungen  


@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);}


▐Programmanalyse  


Spring Cache ist sehr leistungsstark und sein Design ist sehr elegant. Es eignet sich besonders für Szenarien, in denen die Cache-Steuerung nicht so detailliert ist, wie z. B. statische Anzeigeseiten, Anzahl der Likes, Rankings usw. Das Merkmal dieser Szenarien ist, dass sie keine so strengen Anforderungen an Echtzeitdaten stellen Sie müssen die Datenquelle zwischenspeichern und nach Ablauf automatisch zwischenspeichern. Aktualisieren Sie sie einfach. In diesen Szenarien ist Spring Cache ein Artefakt, das die Forschungs- und Entwicklungseffizienz erheblich verbessern kann.

In Szenarien mit hoher Parallelität und großem Datenvolumen ist jedoch immer noch eine Funktionserweiterung für eine feine Steuerung der Cache-Granularität erforderlich.
  1. Mehrstufiger Cache;
  2. Der Cache wird regelmäßig aktualisiert;
  3. Listencache;
  4. Cache-CPP-Schutzmechanismus;
  5. Cache-Anzahl.

Beispiel: Spring Cache verfügt nicht über eine Cache-Implementierung der zweiten Ebene


Benutzerdefiniertes Cache-Schema


Lernen Sie die Spring-Cache-Framework-Lösung kennen und implementieren Sie ein benutzerdefiniertes Cache-Framework, das nicht nur die Vorteile des Spring-Cache-Frameworks beibehält, sondern auch viele fehlende Funktionen des Spring-Caches realisiert, wie z. B. Cache-Aufschlüsselung, Cache-Penetrationsschutz, mehrstufiger Cache usw .


▐Beispiel   für einen Anmerkungscode



▐Projektstruktur  



schreibe am Ende

Mithilfe der Spring-Cache-Implementierung erstellen wir ein benutzerdefiniertes Cache-Framework und erweitern viele Anmerkungen wie Zählung, Cache-Aktualisierung, Listen-Cache, verteilte Sperre, mehrstufiger Cache usw., wodurch nicht nur die Trennung von Cache-Code und realisiert wird Geschäftscode, erweitert aber auch die Feder Die Fähigkeit zum Zwischenspeichern verbessert die Lesbarkeit des Codes erheblich und verringert die Effizienz der Wartung des zwischengespeicherten Codes.


Teamvorstellung


Die Mission des Tmall Automotive Technology Teams besteht darin, das ultimative Leben von Menschen und Autos zu erleben, die Automobilindustrie neu zu gestalten und ein fürsorglicher Autoverwalter um Sie herum zu sein. Sie alle stärken den Geist der Verbraucher für die Online-Autobesichtigung, den Kauf und die Wartung von Autos sowie die Digitalisierung und vertikale Integration der Automobilindustrie und durch Modelldurchbrüche die Integration von Produkt und Effekt nutzen, die Brancheneffizienz verbessern und Branchendividenden schaffen.


¤Lesen   erweitern¤

3DXR-Technologie  |  . Terminaltechnologie  | 

Serverseitige Technologie  |  . Technische Qualität  | 


Dieser Artikel wurde über das öffentliche WeChat-Konto – Big Taobao Technology (AlibabaMTT) – geteilt.
Bei Verstößen wenden Sie sich bitte zur Löschung an [email protected].
Dieser Artikel ist Teil des „ OSC Source Creation Plan “. Alle, die ihn lesen, sind herzlich eingeladen, mitzumachen und ihn gemeinsam zu teilen.

Ein in den 1990er Jahren geborener Programmierer hat eine Videoportierungssoftware entwickelt und in weniger als einem Jahr über 7 Millionen verdient. Das Ende war sehr bestrafend! High-School-Schüler erstellen im Rahmen einer Coming-of-Age-Zeremonie ihre eigene Open-Source-Programmiersprache – scharfe Kommentare von Internetnutzern: Der inländische Dienst Taobao (taobao.com) verließ sich aufgrund des grassierenden Betrugs auf RustDesk und stellte die inländischen Dienste ein und startete die Arbeit zur Optimierung der Webversion von Java neu 17 ist die am häufigsten verwendete Java LTS-Version. Windows 11 erreicht weiterhin einen Rückgang. Open Source Daily unterstützt die Übernahme von Open Source Rabbit R1; Electric schließt die offene Plattform Apple veröffentlicht M4-Chip Google löscht Android Universal Kernel (ACK) Unterstützung für RISC-V-Architektur Yunfeng ist von Alibaba zurückgetreten und plant, in Zukunft unabhängige Spiele auf der Windows-Plattform zu produzieren
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4662964/blog/11104135
Empfohlen
Rangfolge