Heim Backend-Entwicklung Golang Implementierung von lokalem Caching mit Golangs Web-Framework Buffalo Framework

Implementierung von lokalem Caching mit Golangs Web-Framework Buffalo Framework

Jun 24, 2023 am 09:21 AM
Cache golang Web 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

Schritt 2: Gorilla/Mux-Abhängigkeit hinzufügen

Wir werden Gorilla/Mux als unseren HTTP-Router verwenden. Dazu müssen wir die Abhängigkeit von Gorilla/Mux hinzufügen. Wir können dies tun, indem wir die folgende Zeile in die Datei 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 dev

Schritt 3: Erstellen Sie einen Cache-Controller

Wir 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/items
In 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 verwenden

Jetzt 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1544
276
Verständnis der Leistungsunterschiede zwischen Golang und Python für Web -APIs Verständnis der Leistungsunterschiede zwischen Golang und Python für Web -APIs Jul 03, 2025 am 02:40 AM

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

So verwenden Sie die Transienten -API zum Zwischenspeichern So verwenden Sie die Transienten -API zum Zwischenspeichern Jul 05, 2025 am 12:05 AM

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.

Vergleich des Speicherpfotenpunkts: Ausführen identischer Webdienst -Workloads in Golang und Python ausführen Vergleich des Speicherpfotenpunkts: Ausführen identischer Webdienst -Workloads in Golang und Python ausführen Jul 03, 2025 am 02:32 AM

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

Implementierung verschiedener Caching -Strategien in Laravel Implementierung verschiedener Caching -Strategien in Laravel Jul 09, 2025 am 02:47 AM

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

Der Stand der Bibliotheken des maschinellen Lernens: Golangs Angebote gegen das umfangreiche Python -Ökosystem Der Stand der Bibliotheken des maschinellen Lernens: Golangs Angebote gegen das umfangreiche Python -Ökosystem Jul 03, 2025 am 02:00 AM

PythonisthedededHedLuGuageForminelearningDuetoitsMatureCosystem, whileofferslightweighttoolsSuitedForspecificusecases

Unterschiede zur Speicherverwaltung verstehen: Golangs GC gegen Pythons Referenzzählung Unterschiede zur Speicherverwaltung verstehen: Golangs GC gegen Pythons Referenzzählung Jul 03, 2025 am 02:31 AM

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.

Golang -Zeiger zur Schnittstellenerklärung Golang -Zeiger zur Schnittstellenerklärung Jul 21, 2025 am 03:14 AM

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.

Vergleich der Standardbibliotheken: Schlüsselunterschiede zwischen Golang und Python Vergleich der Standardbibliotheken: Schlüsselunterschiede zwischen Golang und Python Jul 03, 2025 am 02:29 AM

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

See all articles