加速您的 Golang 項目,無需每次開始新項目時設定資料庫的麻煩。厭倦了從頭開始配置資料庫?只是為了面對新的問題嗎?別再猶豫了 在這篇部落格中,我們將研究 Golang 快取庫,它支援 TTL、磁碟持久性 和 雜湊資料類型。
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)
這將每 5 秒拍攝一次資料快照並將其儲存到 Snapshot.data 檔案中。預設情況下,快照已停用,如果未提供 SnapshotInterval,則預設值為 5 秒。
注意: 如果 EnableSnapshot 為 false,則不會匯入檔案中儲存的資料
const ( ErrKeyNotFound = "key does not Exists" ErrFieldNotFound = "field does not Exists" ErrNotHashvalue = "not a Hash value/table" ErrHmsetDataType = "invalid data type, Expected Struct/Map" )
這些是編寫程式碼時可能出現的常見錯誤。這些變數為您提供了一個清晰且簡單的錯誤比較方法來確定錯誤。
data,err := cache.Get("key") if err != nil { if err.Error() == goswift.ErrKeyNotFound { //do something } }
每 3 秒就會呼叫 **sweaper ** 函數來清除雜湊表中的過期值。我們維護一個指向哈希圖的最小堆。頂部元素將是具有最小 TTL 的鍵。我們遍歷樹,直到 TTL 大於當前時間。
我不建議您在生產中使用它! ! ,但請隨意在您的小型專案中使用它。請嘗試一下,如果遇到錯誤,請在 GitHub 儲存庫上提出問題。
電子郵件:leoantony102@gmail.com
Github:https://github.com/leoantony72
倉庫:https://github.com/leoantony72/goswift
以上是實現具有 TTL 和磁碟持久性的高效能緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!