Nutzen Sie Hochleistungs-Cache mit TTL und Festplattenpersistenz

WBOY
Freigeben: 2024-08-14 10:39:10
Original
670 Leute haben es durchsucht

Go High-Performance Cache with TTL and Disk Persistence

1.Einleitung

Beschleunigen Sie Ihre Golang-Projekte, ohne jedes Mal eine Datenbank einrichten zu müssen, wenn Sie ein neues Projekt beginnen. Sind Sie es leid, Datenbanken von Grund auf neu zu konfigurieren? Nur um sich neuen Problemen zu stellen? Suchen Sie nicht weiter. In diesem Blog werden wir uns mit der Golang-Caching-Bibliothek mit Unterstützung für TTL, Festplattenpersistenz und Hash-Datentyp befassen.

GoSwift.

2.Voraussetzung

  • Grundkenntnisse von Golang
  • Wissen darüber, wie ein typischer Cache funktioniert

3.Eigenschaften

  1. Befehl festlegen und abrufen
  2. Befehl aktualisieren
  3. Entf-Befehl
  4. Existiert-Befehl
  5. Unterstützung für TTL
  6. Unterstützung für Festplattenspeicherung (Snapshots)
  7. Unterstützt Hash-Datentypen (Hset, Hget, HgetAll, HMset)
  8. Sicheres Verriegeln

Set & Get-Befehl

import (
    "fmt"
    "github.com/leoantony72/goswift"
)

func main(){
    cache := goswift.NewCache()

    // Value 0 indicates no expiry
    cache.Set("key", "value", 0)

    val, err := cache.Get("key")
    if err !=nil{
        fmt.Println(err)
        return
    }
    fmt.Println("key", val)
}
Nach dem Login kopieren

Befehl aktualisieren

// Update value
// @Update(key string, val interface{}) error
err = cache.Update("key","value2")
if err != nil{
    fmt.Println(err)
    return
}
Nach dem Login kopieren

Del-Befehl && Existiert-Befehl

// Delete command
// @Del(key string)
cache.Del("key")

// Exist command
// @Exists(key string) bool
value = cache.Exists("key")
fmt.Println(value) // returns false
Nach dem Login kopieren

Unterstützung für TTL

// Set Value with Expiry
// @Set(key string, val interface{}, exp int)
// Here expiry is set to 1sec
cache.Set("key","value",1000)

// Hset command
// @Hset(key, field string, value interface{}, exp int)
// in this case the "key" expires in 1sec
cache.Hset("key","name","value",1000)
cache.Hset("key","age",18,1000)
Nach dem Login kopieren

Unterstützt Hash-Datentypen (Hset, Hget, HgetAll, HMset)

// Hset command
// @Hset(key, field string, value interface{}, exp int)
// in this case the "key" expires in 1sec
cache.Hset("key","name","value",1000)
cache.Hset("key","age",18,1000)


// HMset command
// @HMset(key string, d interface{}, exp int) error
// Set a Hash by passing a Struct/Map
// ---by passing a struct---
type Person struct{
    Name  string
    Age   int
    Place string
}

person1 := &Person{Name:"bob",Age:18,Place:"NYC"}
err = cache.HMset("key",person1)
if err != nil{
    fmt.Println(err)
    return
}

// ---by passing a map---
person2 := map[string]interface{Name:"john",Age:18,Place:"NYC"}
err = cache.HMset("key",person2)
if err != nil{
    fmt.Println(err)
    return
}


// Hget command
// @HGet(key, field string) (interface{}, error)
// get individual fields in Hash
data,err := cache.HGet("key","field")
if err != nil{
    fmt.Println(err)
    return
}
fmt.Println(data)

// HgetAll command
// @HGetAll(key string) (map[string]interface{}, error)
// gets all the fields with value in a hash key
// retuns a map[string]interface{}
data,err = cache.HGetAll("key")
if err != nil{
    fmt.Println(err)
    return
}

Nach dem Login kopieren

Schnappschüsse

opt := goswift.CacheOptions{
        EnableSnapshots:  true,
        SnapshotInterval: time.Second*5,
    }
c := goswift.NewCache(opt)
Nach dem Login kopieren

Dadurch wird alle 5 Sekunden ein Schnappschuss der Daten erstellt und in einer Snapshot.data-Datei gespeichert. Standardmäßig sind Snapshots deaktiviert und wenn das SnapshotInterval nicht angegeben ist, beträgt der Standardwert 5 Sekunden.

HINWEIS: Wenn EnableSnapshot falsch ist, werden die in der Datei gespeicherten Daten nicht importiert

Fehlerbehandlung

const (
    ErrKeyNotFound   = "key does not Exists"
    ErrFieldNotFound = "field does not Exists"
    ErrNotHashvalue  = "not a Hash value/table"
    ErrHmsetDataType = "invalid data type, Expected Struct/Map"
)
Nach dem Login kopieren

Dies sind die häufigsten Fehler, die beim Schreiben des Codes auftreten können. Diese Variablen bieten Ihnen eine klare und einfache Fehlervergleichsmethode zur Fehlerermittlung.

data,err := cache.Get("key")
if err != nil {
    if err.Error() == goswift.ErrKeyNotFound {
        //do something
}
}    
Nach dem Login kopieren

Innenleben des Cache-Ablaufs

Alle 3 Sekunden wird die Funktion **sweaper ** aufgerufen, um die abgelaufenen Werte aus der Hash-Tabelle zu löschen. Wir pflegen einen Min-Heap, der auf die Hash-Map verweist. Das oberste Element ist der Schlüssel mit der kleinsten TTL. Wir durchlaufen den Baum, bis TTL größer als die aktuelle Zeit ist.

Zusammenfassung

Ich würde Ihnen nicht raten, dies in der Produktion zu verwenden!!, aber Sie können es gerne in Ihrem kleinen Nebenprojekt verwenden. Probieren Sie es aus und wenn Sie auf einen Fehler stoßen, erstellen Sie ein Problem im GitHub-Repo.

E-Mail: leoantony102@gmail.com
Github: https://github.com/leoantony72
Repo: https://github.com/leoantony72/goswift

Das obige ist der detaillierte Inhalt vonNutzen Sie Hochleistungs-Cache mit TTL und Festplattenpersistenz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!