Heim > Backend-Entwicklung > Golang > So erstellen Sie ein einfaches Caching-System in Golang

So erstellen Sie ein einfaches Caching-System in Golang

PHPz
Freigeben: 2023-04-03 13:44:11
Original
676 Leute haben es durchsucht

Caching ist eine gängige Technik zur Leistungsoptimierung. In modernen Computersystemen speichern wir häufig verwendete Daten häufig im Speicher, um einen schnelleren Zugriff zu ermöglichen. In Webanwendungen kann der Caching-Mechanismus den Druck auf die Datenbank verringern und die Reaktionsgeschwindigkeit der Anwendung verbessern.

Golang bietet einen hervorragenden Parallelitätsmechanismus und ein Speicherverwaltungsmodell und eignet sich daher sehr gut für die Implementierung eines Hochleistungs-Caching-Systems. In diesem Artikel erfahren Sie, wie Sie mit Golang ein einfaches Caching-System erstellen.

  1. Grundkonzept

Das einfachste Caching-System besteht darin, Daten in einer Karte zu speichern. Map ist eine der wichtigsten integrierten Datenstrukturen in Golang und ermöglicht schnelle Abfragevorgänge. Wir können uns eine Karte als eine Sammlung von Schlüssel-Wert-Paaren vorstellen, wobei der Schlüssel eindeutig ist und jedem Wert entspricht.

Wir können den folgenden Code verwenden, um eine Karte zu erstellen:

cache := make(map[string]string)
Nach dem Login kopieren

Als nächstes können wir der Karte Daten hinzufügen:

cache["key"] = "value"
Nach dem Login kopieren

Dann können wir den Wert basierend auf dem Schlüssel abfragen:

val, ok := cache["key"]
if ok {
    fmt.Println(val)
}
Nach dem Login kopieren

Wir können Karte verwenden, um a zu implementieren einfaches Caching-System zum Speichern von aus der Datenbank abgerufenen Daten. Da die Abfrage der Datenbank eine gewisse Zeit in Anspruch nimmt, können wir wiederholte Abfragen der Datenbank vermeiden, indem wir die Daten in einer Karte speichern. Auf diese Weise können wir Caching nutzen, um die Leistung unserer Anwendung zu verbessern.

  1. Grundlegende Methode

Wir können Map und Mutex verwenden, um ein grundlegendes Caching-System zu implementieren. Durch die Verwendung von Mutex zur Implementierung der Parallelitätskontrolle kann das Problem vermieden werden, dass mehrere Goroutinen gleichzeitig auf die Karte zugreifen. Die spezifische Implementierung lautet wie folgt:

type Cache struct {
    items map[string]string
    sync.Mutex
}

func (c *Cache) Set(key, val string) {
    c.Lock()
    defer c.Unlock()
    c.items[key] = val
}

func (c *Cache) Get(key string) (string, bool) {
    c.Lock()
    defer c.Unlock()
    val, ok := c.items[key]
    return val, ok
}
Nach dem Login kopieren

In diesem Cache-System definieren wir einen Struktur-Cache, um alle Cache-Elemente zu speichern. items ist eine Karte, die zum Speichern von Datenelementen verwendet wird. Wir definieren außerdem zwei Methoden, Set und Get, um Cache-Elemente festzulegen bzw. abzurufen. Beide Methoden verwenden Mutex, um die Thread-Sicherheit zu gewährleisten.

  1. Ablaufrichtlinie

In praktischen Anwendungen müssen wir normalerweise eine Ablaufrichtlinie definieren. Ohne die Verwendung einer Ablaufrichtlinie können wir abgelaufene Datenelemente im Cache nicht regelmäßig löschen. Daher wird die Leistung des Caching-Systems negativ beeinflusst. In Golang können wir den Time-Typ im Zeitpaket verwenden, um die Ablaufzeit von Cache-Elementen zu berechnen.

Zuerst müssen wir in der Cache-Struktur ein Ablauffeld hinzufügen, um die Ablaufzeit jedes Cache-Elements anzugeben:

type cacheItem struct {
    value    string
    expireAt time.Time
}

type Cache struct {
    items map[string]cacheItem
    sync.Mutex
}
Nach dem Login kopieren

Dann müssen wir in der Get-Methode prüfen, ob das Cache-Element abgelaufen ist. Wenn es abläuft, müssen wir es löschen und false zurückgeben:

func (c *Cache) Get(key string) (string, bool) {
    c.Lock()
    defer c.Unlock()
    item, ok := c.items[key]
    if !ok {
        return "", false
    }
    if item.expireAt.Before(time.Now()) {
        delete(c.items, key)
        return "", false
    }
    return item.value, true
}
Nach dem Login kopieren

Gleichzeitig müssen wir auch eine Methode hinzufügen, um abgelaufene Cache-Elemente regelmäßig zu bereinigen:

func (c *Cache) cleanUp() {
    for {
        time.Sleep(time.Minute)
        c.Lock()
        for key, item := range c.items {
            if item.expireAt.Before(time.Now()) {
                delete(c.items, key)
            }
        }
        c.Unlock()
    }
}
Nach dem Login kopieren

Diese Methode verwendet Sleep, um regelmäßig zu überprüfen, ob das Cache-Element vorhanden ist abgelaufen ist, und löschen Sie die abgelaufenen Cache-Elemente.

  1. Zusammenfassung

In diesem Artikel haben wir gelernt, wie man mit Golang ein einfaches Caching-System aufbaut. Wir verwenden Map und Mutex, um die Datenspeicherung und Parallelitätskontrolle zu implementieren, und verwenden den Time-Typ im Zeitpaket, um die Ablaufzeit anzugeben. Durch die Implementierung einer regelmäßigen Bereinigung abgelaufener Cache-Elemente in der Get-Methode vermeiden wir das Problem einer Verschlechterung der Cache-Systemleistung. Dieses einfache Caching-System kann erweitert werden, um die Anwendungsleistung und Skalierbarkeit zu verbessern.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie ein einfaches Caching-System in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage