


Implementierung von lokalem Caching mit Golangs Web-Framework Buffalo Framework
Lokales Caching ist eine häufig verwendete Technologie in der Webentwicklung, die die Leistung und Verfügbarkeit von Webanwendungen verbessern kann. Während des Entwicklungsprozesses müssen wir häufig bestimmte Frameworks verwenden, um lokales Caching zu implementieren. In diesem Artikel werde ich vorstellen, wie man das Web-Framework Buffalo von Golang verwendet, um lokales Caching zu implementieren.
Das Buffalo-Framework ist ein Web-Framework, das auf der Grundlage der Golang-Sprache entwickelt wurde. Im Buffalo-Framework können wir problemlos lokales Caching implementieren, was die Leistung von Webanwendungen erheblich verbessern kann. Im Folgenden werde ich vorstellen, wie das Buffalo-Framework zur Implementierung von lokalem Caching verwendet wird.
Schritt 1: Erstellen Sie eine neue Buffalo-Anwendung
Um das Buffalo-Framework zur Implementierung von lokalem Caching zu verwenden, müssen wir zunächst eine neue Buffalo-Anwendung erstellen. Mit dem folgenden Befehl können wir eine neue Buffalo-App erstellen:
$ buffalo new myapp
Dadurch wird eine neue Buffalo-App mit dem Namen myapp
erstellt. myapp
的新Buffalo应用程序。
第二步:添加gorilla / mux依赖关系
我们将使用gorilla / mux作为我们的HTTP路由器。为此,我们需要添加gorilla / mux的依赖项。我们可以通过在go.mod
文件中添加以下行来实现:
require github.com/gorilla/mux v1.8.0
然后运行以下命令来下载依赖项:
$ go mod download
第三步:创建一个缓存控制器
我们需要创建一个缓存控制器来处理所有请求。我们可以创建一个名为CacheController
的新文件,并添加以下代码:
package actions import ( "net/http" "time" "github.com/gorilla/mux" "github.com/gobuffalo/buffalo" "github.com/gobuffalo/buffalo/cache" ) func CacheController() buffalo.Handler { // create a map to store the cache entries var cacheEntries = make(map[string]cache.Store) return func(c buffalo.Context) error { // get the current route route := c.Value("current_route").(mux.RouteMatch) // get the cache entry name cacheKey := route.Route.GetName() // check if the cache entry exists if cacheEntry, ok := cacheEntries[cacheKey]; ok { // if it does, get the value from the cache cachedValue, err := cacheEntry.Get(c.Request().URL.String()) if err == nil { // if there's no error, return the value from the cache return c.Render(http.StatusOK, r.JSON(cachedValue)) } } // if the cache entry doesn't exist or there was an error getting // the value from the cache, run the handler and cache the result h := route.Route.GetHandler() res := h(c) cacheStore := cache.NewCache(time.Minute * 1) cacheStore.Add(c.Request().URL.String(), res.Body.String()) cacheEntries[cacheKey] = cacheStore return res } }
在这个控制器中,我们使用了gorilla / mux的mux.RouteMatch
结构,来获取当前的路由信息和名称。然后我们使用Buffalo的cache
包来实现缓存。当我们检查缓存时,我们首先检查路由是否存在于我们的缓存map
中,然后检查缓存中是否存在与请求URL的匹配项。如果存在匹配项,则返回缓存的值,否则运行处理程序并将结果缓存起来。
第四步:在路由器中使用缓存控制器
现在我们可以在路由器中使用缓存控制器了。我们只需要在路由器的中间件中添加CacheController
go.mod
einfügen: func (a *App) cacheRoutes() { r := a.Router r.Use(func(next buffalo.Handler) buffalo.Handler { return func(c buffalo.Context) error { c.Set("start_time", time.Now()) return next(c) } }) r.Use(CacheController()) }Dann führen Sie den folgenden Befehl aus, um die Abhängigkeiten herunterzuladen:
$ buffalo devSchritt 3: Erstellen Sie einen Cache-ControllerWir brauchen Erstellen Sie einen Cache-Controller, um alle Anfragen zu verarbeiten. Wir können eine neue Datei namens
CacheController
erstellen und den folgenden Code hinzufügen: $ curl http://localhost:3000/api/v1/itemsIn diesem Controller verwenden wir die
mux.RouteMatch
-Struktur von Gorilla/Mux, um das aktuelle Routing zu erhalten Informationen und Name. Dann verwenden wir das cache
-Paket von Buffalo, um Caching zu implementieren. Wenn wir den Cache überprüfen, prüfen wir zunächst, ob die Route in unserer Cache-Karte vorhanden ist, und prüfen dann, ob im Cache eine Übereinstimmung mit der Anforderungs-URL vorhanden ist. Bei einer Übereinstimmung wird der zwischengespeicherte Wert zurückgegeben, andernfalls wird der Handler ausgeführt und das Ergebnis zwischengespeichert. Schritt 4: Den Cache-Controller im Router verwendenJetzt können wir den Cache-Controller im Router verwenden. Wir müssen lediglich den Controller CacheController
in der Middleware des Routers hinzufügen. Wir können diesen Prozess mit dem folgenden Code implementieren: 🎜rrreee🎜 In diesem Beispiel fügen wir auch eine Startzeit-Middleware hinzu, um die Dauer und Leistung der Anfrage aufzuzeichnen. 🎜🎜Schritt 5: Cache testen🎜🎜Jetzt können wir testen, ob unser Cache ordnungsgemäß funktioniert. Wir können die Buffalo-Anwendung mit dem folgenden Befehl starten: 🎜rrreee🎜 Dann können wir Tools wie Curl verwenden, um unseren Cache zu testen. Zum Beispiel: 🎜rrreee🎜 Wir können diesen Befehl mehrmals ausführen, um den Cache zu testen. Beim ersten Durchlauf wird der Cache gefüllt und beim zweiten und den folgenden Durchläufen werden die zwischengespeicherten Werte zurückgegeben. 🎜🎜Fazit🎜🎜In diesem Artikel haben wir vorgestellt, wie Sie das Buffalo-Framework verwenden, um lokales Caching zu implementieren. Das Buffalo-Framework ist für die Entwicklung von Webanwendungen sehr nützlich, da es viele häufige Aufgaben und Vorgänge vereinfacht. Durch die Verwendung des Buffalo-Frameworks und einiger anderer Abhängigkeiten wie Gorilla/Mux und dem Cache-Paket von Buffalo können wir problemlos lokales Caching implementieren und die Leistung und Verfügbarkeit unserer Webanwendungen verbessern. 🎜Das obige ist der detaillierte Inhalt vonImplementierung von lokalem Caching mit Golangs Web-Framework Buffalo Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

GolangoffersSuperiorperformance, NativeConcurrencyViagoroutines und efficienionResourceuse, MakingidealforHigh-Travaffic, niedrig-ladencyapis;

Transientsapi ist ein integriertes Tool in WordPress, um automatische Ablaufdaten vorübergehend zu speichern. Die Kernfunktionen sind set_transient, get_transient und delete_transient. Im Vergleich zu OptionsAPI unterstützt Transienten die Festlegung der Überlebenszeit (TTL), die für Szenarien wie Cache -API -Anforderungsergebnisse und komplexe Computerdaten geeignet ist. Wenn Sie es verwenden, müssen Sie auf die Einzigartigkeit des wichtigsten Namens und des Namespace, des Mechanismus "Lazy Deletion" und des Problems, das möglicherweise nicht in der Umgebung von Objekt -Cache dauert, auf die Einzigartigkeit achten. Typische Anwendungsszenarien umfassen die Reduzierung der externen Anforderungsfrequenz, die Steuerung des Codeausführungsrhythmus und die Verbesserung der Ladenleistung der Seite.

GouseS sisifificantantlessMemoryThanpythonWhenrunningwebservicesDuetolanguagedesignandConcurrencyModeldifferzen.1.go'sgoroutinesareligweightWithminimalStackoverhead, erlauben, dass

Cachinginlaravelcanbeoptimized ThroughultiplieReTailorateTospecificusecases.1) UserouteorpageCachingForstaticContent, Suchasanaboutuspage, BywrappingTheroutelogicwithcache ()-> Remember () Tostorereredhtmlandeduderverload.2) cachequeryresultsw

PythonisthedededHedLuGuageForminelearningDuetoitsMatureCosystem, whileofferslightweighttoolsSuitedForspecificusecases

Der Kernunterschied zwischen Go und Python in der Speicherverwaltung sind die unterschiedlichen Müllsammlungsmechanismen. GO verwendet eine gleichzeitige Marke (Markandsweep) GC, die automatisch mit der Programmlogik ausgeführt und ausgeführt wird, und befasst sich effektiv mit kreisförmigen Referenzen. Es ist für hohe Parallelitätsszenarien geeignet, kann aber die Recyclingzeit nicht genau steuern. Während Python hauptsächlich auf die Referenzzählung angewiesen ist und Objektreferenzen sofort freigegeben werden, wenn sie auf Null gesetzt werden. Der Vorteil ist, dass sie sofortig Recycling und einfache Implementierung sind, aber es gibt ein kreisförmiges Referenzproblem, sodass sie das GC -Modul verwenden müssen, um die Reinigung zu unterstützen. In der tatsächlichen Entwicklung eignet sich Go für Hochleistungsserver-Programme besser, während Python für Skriptklassen oder Anwendungen mit geringen Leistungsanforderungen geeignet ist.

Eine Schnittstelle ist kein Zeigertyp, sie enthält zwei Zeiger: dynamischer Typ und Wert. 1. Die Schnittstellenvariable speichert den Typ Deskriptor und Datenzeiger des spezifischen Typs. 2. Wenn der Zeiger der Schnittstelle zugewiesen wird, speichert er eine Kopie des Zeigers, und die Schnittstelle selbst ist kein Zeigertyp. 3. Ob die Schnittstelle nicht ist, muss der Typ und den Wert gleichzeitig beurteilt werden; 4. Wenn der Methodenempfänger ein Zeiger ist, kann nur der Zeigertyp die Schnittstelle realisieren. 5. Achten Sie in der tatsächlichen Entwicklung auf die Differenz zwischen der Wertkopie und Zeigerübertragung der Schnittstelle. Wenn Sie diese verstehen, können Sie Laufzeitfehler vermeiden und die Code -Sicherheit verbessern.

Die Standardbibliotheken von Golang und Python unterscheiden sich erheblich in den Bereichen der Designphilosophie, Leistung und Parallelität, Entwicklererfahrung und Webentwicklungsfunktionen. 1. In Bezug auf die Designphilosophie betont Go die Einfachheit und Konsistenz und bietet ein kleines, aber effizientes Paket. Während Python dem Konzept des "eigenen Akkus mitbringen" folgt und umfangreiche Module bietet, um die Flexibilität zu verbessern. 2. In Bezug auf Leistung und Parallelität unterstützt GO nativ Coroutinen und Kanäle, die für hohe Parallelitätsszenarien geeignet sind. Python ist durch GIL begrenzt, und Multithreading kann keine echte Parallelität erreichen und muss sich auf schwerere Multi-Process-Module verlassen. 3. In Bezug auf die Entwicklererfahrung, GO Toolchain Forces Forces Code -Formatierung und standardisierter Import, um die Konsistenz der Teamzusammenarbeit zu verbessern. Python bietet mehr Freiheit, kann aber leicht zu Verwirrung im Stil führen. 4. Webentwicklung
