加速您的 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中文网其他相关文章!