Rumah > Artikel > pembangunan bahagian belakang > Pergi Cache Berprestasi Tinggi dengan TTL dan Kegigihan Cakera
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.
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) }
// Update value // @Update(key string, val interface{}) error err = cache.Update("key","value2") if err != nil{ fmt.Println(err) return }
// Delete command // @Del(key string) cache.Del("key") // Exist command // @Exists(key string) bool value = cache.Exists("key") fmt.Println(value) // returns false
// 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)
// 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 }
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
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 } }
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.
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!