Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pergi Cache Berprestasi Tinggi dengan TTL dan Kegigihan Cakera

Pergi Cache Berprestasi Tinggi dengan TTL dan Kegigihan Cakera

WBOY
WBOYasal
2024-08-14 10:39:10667semak imbas

Go High-Performance Cache with TTL and Disk Persistence

1.Pengenalan

Percepatkan projek Golang anda tanpa perlu menyediakan pangkalan data setiap kali anda memulakan projek baharu. Bosan dengan mengkonfigurasi pangkalan data dari awal? Hanya untuk menghadapi masalah baru? Tidak perlu mencari lagi Dalam blog ini kita akan melihat ke dalam perpustakaan caching Golang dengan Sokongan untuk TTL, Kegigihan cakera dan Jenis Data Hash.

GoSwift.

2. Prasyarat

  • Pengetahuan Asas Golang
  • Pengetahuan tentang cara cache biasa berfungsi

3.Ciri-ciri

  1. Tetapkan & Dapatkan arahan
  2. Arahan kemas kini
  3. Arahan del
  4. Arahan wujud
  5. Sokongan untuk TTL
  6. Sokongan untuk Simpan Cakera(Snapshot)
  7. Sokong jenis Data Hash (Hset, Hget, HgetAll, HMset)
  8. Penguncian Selamat

Tetapkan & Dapatkan arahan

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

Perintah kemas kini

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

Perintah del && Perintah wujud

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

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

Sokongan untuk 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)

Sokong jenis Data Hash (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
}

Syot kilat

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

Ini akan mengambil gambar Data Setiap 5saat dan menyimpannya ke dalam fail Snapshot.data. Secara lalai Syot Kilat dilumpuhkan dan jika SnapshotInterval tidak diberikan nilai lalai ialah 5saat.

NOTA: Jika EnableSnapshot palsu, Data yang disimpan dalam fail tidak akan diimport

Ralat pengendalian

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

Ini ialah Ralat biasa yang mungkin berlaku semasa menulis kod. Pembolehubah ini memberikan anda kaedah perbandingan Ralat yang jelas dan mudah untuk menentukan ralat.

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

Kerja dalaman cache tamat tempoh

Setiap 3 saat fungsi **sweaper **dipanggil untuk mengosongkan nilai tamat tempoh daripada jadual cincang. Kami mengekalkan timbunan min yang menghala ke peta cincang. Elemen teratas akan menjadi kunci dengan TTL terkecil. kami merentasi pokok sehingga TTL lebih besar daripada masa semasa.

Ringkasan

Saya tidak akan menasihati anda untuk menggunakan ini dalam pengeluaran!!, tetapi jangan ragu untuk menggunakannya dalam projek sampingan kecil anda. Cubalah dan jika anda menghadapi pepijat, buat isu pada repo GitHub.

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

Atas ialah kandungan terperinci Pergi Cache Berprestasi Tinggi dengan TTL dan Kegigihan Cakera. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn